@alysenko

Как добавить атрибут в модель Yii?

Ситуация на Yii(версия 1).
В базе есть таблица "Продукты". В продукта есть поля:
'promo' => 'Акционный',
'status_new' => 'Новинка',
'status_ends' => 'Заканчивается',
'status_leader' => 'Лидер продаж',
'status_shop_select' => 'Выбор магазина',
'status_super_price' => 'Супер цена',

Каждое поле может иметь значение 1 или 0.

В форме есть поле в котором выбирается статус:
<?php echo $form->dropDownList($model, 'promo_status',
 array(
'promo' => 'Акционный',
'status_new' => 'Новинка',
'status_ends' => 'Заканчивается',
'status_leader' => 'Лидер продаж',
'status_shop_select' => 'Выбор магазина',
'status_super_price' => 'Супер цена',
),
 array('empty' => 'Выберите статус')
);?>


В модели добавлена переменная $promo_status, которую получаем с формы и с помощью фильтров в правилах записываем соответствующие значения в нужные поля:

public function rules()
	{
		return array(
                      ...
			array('promo_status', 'safe'),
			array('status_new', 'filter', 'filter'=> function (){ return ($this->promo_status == 'status_new') ? 1 : 0; }),
			array('promo', 'filter', 'filter'=> function (){ return ($this->promo_status == 'promo') ? 1 : 0; }),
			array('status_ends', 'filter', 'filter'=> function (){ return ($this->promo_status == 'status_ends') ? 1 : 0; }),
			array('status_leader', 'filter', 'filter'=> function (){ return ($this->promo_status == 'status_leader') ? 1 : 0; }),
			array('status_shop_select', 'filter', 'filter'=> function (){ return ($this->promo_status == 'status_shop_select') ? 1 : 0; }),
			array('status_super_price', 'filter', 'filter'=> function (){ return ($this->promo_status == 'status_super_price') ? 1 : 0; }),
		);
	}


Проблема заключается в следующем: при обновлении товара в форму подтягиваются значения с базы данных, кроме поля promo_status, поскольку такого поля нет в базе. Как сделать чтобы поле promo_status по-умолчанию получало значение статуса? Например, если статус в базе 'status_new', то при обновлении товара автоматически устанавливалось значение в поле promo_status тоже 'status_new', то есть чтобы оно не было пустым.
  • Вопрос задан
  • 487 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
В afterFind написать логику присвоения
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
1) нехорошо смешивать названия ключей и массивы данных по именам, поле promo_status и переменная $promo_status, кроме того что переменная не по пср, так еще и путаемся в названиях и домавляем себе и другим батхерта.
2) Поле promo_status в таблице отсутствует, делаем вывод что это костылик, а раз пошли в разнос - на отрубленной голове по волосам не плачут. Фигачь костыль для тупого копирования: либо метод который будет делать это доп поле, и его в любой момент можно закоментить или отрефакторить, либо в тот же филтер еще одну строчку кода. Пометить как туду и убрать этот фикалоход в ближайшем будущем.

PS: Максим Тимофеев вот дело говрит, сразу в afterFind засунуть.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы