Нужно сделать так, чтобы при получении данных из формы мы писали в базу все полученные данные, кроме одного.
Например, у нас есть в форме 3 поля: f1, f2, f3.
Мы в модели можем написать так:
public function scenarios()
{
return [
'my' => ['f1', 'f2'],
];
}
Все отлично, но если у нас полей не 3, а 30, то переписывать все доступные поля не хочется.
Есть ли способ через сценарии написать, чтобы доступными были все, кроме одного, ну, или кроме нескольких?
Если необходимо именно через сценарии, то можно вспомнить что это обычная функция, вы в ней можете получить все поля модели, удалить то поле которое не нужно и передать в сценарий
public function scenarios()
{
$fields = $this->attributes();
unset($fields['somefield']);
return [
'my' => $fields,
];
}
Можно другим путем пойти, очистить поле перед валидацией:
public function beforeValidate(){
$this->somefield = null;
return parent::beforeValidate();
}
А можно и просто в контроллере не передавать модели то поле которое не надо:
public function actionSomeAction(){
$post = Yii::$app->request->post();
$post['somefield'] = null;
$model = new Model();
if($model->load($post)){
...
}
...
}
Ну и еще разные пути)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
при вводе числа AA в 16и ричнной системе выдаёт не 170 а 160
Объясните, пожалуйста, как настроить среду запуска и отладки драйвера на Windows чтобы target машина была виртуальная, а написание происходило...
Как переменную int положить в массив char в С++