Answer the question
In order to leave comments, you need to log in
How to add an attribute to a Yii model?
The situation on Yii (version 1).
There is a table "Products" in the database. The product has fields:
'promo' => 'Акционный',
'status_new' => 'Новинка',
'status_ends' => 'Заканчивается',
'status_leader' => 'Лидер продаж',
'status_shop_select' => 'Выбор магазина',
'status_super_price' => 'Супер цена',
<?php echo $form->dropDownList($model, 'promo_status',
array(
'promo' => 'Акционный',
'status_new' => 'Новинка',
'status_ends' => 'Заканчивается',
'status_leader' => 'Лидер продаж',
'status_shop_select' => 'Выбор магазина',
'status_super_price' => 'Супер цена',
),
array('empty' => 'Выберите статус')
);?>
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; }),
);
}
Answer the question
In order to leave comments, you need to log in
1) нехорошо смешивать названия ключей и массивы данных по именам, поле promo_status и переменная $promo_status, кроме того что переменная не по пср, так еще и путаемся в названиях и домавляем себе и другим батхерта.
2) Поле promo_status в таблице отсутствует, делаем вывод что это костылик, а раз пошли в разнос - на отрубленной голове по волосам не плачут. Фигачь костыль для тупого копирования: либо метод который будет делать это доп поле, и его в любой момент можно закоментить или отрефакторить, либо в тот же филтер еще одну строчку кода. Пометить как туду и убрать этот фикалоход в ближайшем будущем.
PS: Максим Тимофеев вот дело говрит, сразу в afterFind засунуть.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question