@dikium

Как заставить заработать метод ActiveRecord::load() в Yii2?

Здравствуйте! У меня такой вопрос: я использую 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()?
  • Вопрос задан
  • 690 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
если Вы загружаете в модель данные с помощью метода load - то загружены будут только те атрибуты которые считаются безопастными, а конкретно в Вашем случае все атрибуты которые указаны в rules. Решить эту проблему Вы можете назначив атрибуту Comment валидатор safe
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы