В частности столкнулся с тем, что одна форма будет иметь поле ARTICUL и это поле должно быть проверено моделью на факт отсутствия данного значения в таблице бд. И оно должно быть обязательным.
А вторая форма будет на редактирование уже имеющей строки в таблице.
Проблема в том, что до конца не могу понять SCENARIO. Как понять формам, что одна из них включает в себя обработку с ARTICUL'ом, а другая нет?
Модель:
Код: Выделить всё
const SCENARIO_NEWGOODS = 'newGoods';
const SCENARIO_EDITGOODS = 'editGoods';
public static function tableName()
{
return "goods";
}
public function rules() {
return [
[['QUANTITY', 'PRICE', 'DESCRIPTION', 'PRODUCT_NAME'], 'default'],
[['ARTICUL', 'QUANTITY', 'PRICE'], 'required'],
['ARTICUL', 'validateArticul'],
];
}
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[static::SCENARIO_NEWGOODS] = ['ARTICUL', 'QUANTITY', 'PRICE', 'DESCRIPTION', 'PRODUCT_NAME'];
$scenarios[static::SCENARIO_EDITGOODS ] = ['QUANTITY', 'PRICE'];
return $scenarios;
}
public function validateArticul()
{
$articul = Unloading::find()
->where(['ARTICUL' => $this->ARTICUL])
->all();
if ($articul) {
$this->addError('ARTICUL', 'Товар с таким артикулом уже есть на складе.');
}
}
Код: Выделить всё
// в форме с добавлением нового содержится это:
$modelUpdate->scenario = 'newGoods';
// с редактированием это:
$modelUpdate->scenario = 'editGoods';