YII2 не сохраняется модель
Не удается сохранить модель, выдает приведенную ниже ошибку. В нагугленных подобных вопросах везде все решалось правилами валидации, они у меня есть и это не помогает, в чем проблема?
Модель :
class Product extends ActiveRecord
{
public $name;
public $price;
public static function tableName(): string
{
return 'products';
}
public function rules(): array
{
return [
['name','string'],
['price','integer'],
[['name','price'],'required']
];
}
}
Код в контроллере:
$model = new Product();
$model->name = 'z';
$model->price = 5;
$model->insert();
Ответы (1 шт):
Как минимум надо пробовать так:
$model = new Product(['name' => 'z', 'price' => 5.0]);
$model->insert();
Или использовать метод load для загрузки данных в модель.
В целом сейчас, если я понимаю, данные просто заносятся в поля модели, а не необходимые атрибуты модели (да это немного разные вещи). В итоге значения в модели пустые. (Валидация не отрабатывает именно из-за этого) А в БД не установлено значение по умолчанию в колонку name на случай, если будет передано пустое значение. В итоге и ошбика соответствующая..
Если может быть такая ситуация, что передаётся пустое значение, но нужно чтобы БД не ругалась - тогда надо в БД значение это задать
Также нужно удалить публичные свойства, т.к. на текущий момент это виртуальные поля модели и для работы с БД они не используются. Обычно виртуальные поля используются где-то внутри модели в какой-то логике.
Валидация не отрабатывает по двум причинам:
- Описана в самом начале, т.к. данные по факту и не загружены в модель
- Никакого метода validate() у модели не вызвано. Соответственно как может что-то отвалидироваться, если метод валидации не был вызван? Ответ - никак.

