Здравствуйте! У меня такой вопрос: я использую Yii2 и пытаюсь сделать тривиальное сохранение данных из формы в базу данных с помощью ActiveRecord вот так:
$order = new Order();
if($order->load(Yii::$app->request->post()) && $order->validate())
{
$order->save(false);
$this->redirect(['orders']);
}
Сама модель Order выглядит вот так:
class Order extends ActiveRecord
{
const STATUS_NEW = 'na_utv';
const STATUS_DOIT = 'na_isp';
const STATUS_DONE = 'ready';
const STATUS_DECLINE = 'declined';
public static function tableName()
{
return 'orders';
}
public function rules()
{
return [
[['status', 'consume_type', /*'comment',*/ 'count', 'cost'], 'required', 'message' => 'Это поле должно быть заполнено'],
['technic_id', 'match', 'pattern' => '/null.*/', 'not' => true, 'message' => 'В поле "обслуживаемая техника" нужно выбрать принтер, а не подразделение'],
['user_fio', 'required', 'message' => "Введите ФИО заказчика"]
];
}
public function attributeLabels()
{
return [
'technic_id' => 'Обслуживаемая техника',
'status' => 'Статус заказа',
'consume_type' => 'Тип расходного материала',
'count' => 'Количество',
'user_fio' => "ФИО заказчика",
'comment' => 'Комментарий к заказу',
'cost' => 'Стоимость расходного материала'
];
}
}
Проблема в том, что функция создания заявки порождает ошибку базы данных: General error: 1364 Field 'comment' doesn't have a default value
Т.е. функция $order-save() почему то не видит в модели поля comment, хотя соответствующий столбец есть в базе данных.
Ситуация меняется если в методе rules() добавить правило для поля comment - это заставляет метод save() работать как надо. Однако это поле не обязательное и я не хочу помещать его в метод rules() потому что для поля просто нет никаких правил. Как мне быть? Я читал что объект ActiveRecord получает из базу данных список столбцов таблицы и делает аналогичные свойства, но неужели обязательно указывать все столбцы БД в методе rules()?