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 на случай, если будет передано пустое значение. В итоге и ошбика соответствующая..

Если может быть такая ситуация, что передаётся пустое значение, но нужно чтобы БД не ругалась - тогда надо в БД значение это задать

Также нужно удалить публичные свойства, т.к. на текущий момент это виртуальные поля модели и для работы с БД они не используются. Обычно виртуальные поля используются где-то внутри модели в какой-то логике.

Валидация не отрабатывает по двум причинам:

  1. Описана в самом начале, т.к. данные по факту и не загружены в модель
  2. Никакого метода validate() у модели не вызвано. Соответственно как может что-то отвалидироваться, если метод валидации не был вызван? Ответ - никак.
→ Ссылка