Добрый день.
Есть две модели:
Note и Order.
Order:
...
public function relations()
{
return array(
'notes' => array(self::MANY_MANY, 'Note', 'order_note(order_id, note_id)'),
);
}
...
Note:
...
public $assignedOrders;
...
public function rules()
{
return array(
...
array(
'..., assignedOrders, ...',
'safe',
'on' => 'search'
),
...
);
}
...
public function relations()
{
return array(
...
'orders' => array(self::MANY_MANY, 'Order', 'order_note(note_id, order_id)'),
...
);
}
...
public function attributeLabels()
{
return array(
...
'assignedOrders' => '№ заказа(ов)',
...
);
}
...
public function getRelatedOrderNames ()
{
return implode(', ', CHtml::listData($this->orders, 'id', 'name'));
}
...
Во вьюшке:
...
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'notes-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
...
array(
'name' => 'assignedOrders',
'value' => '$data->relatedOrderNames',
'htmlOptions' => array('style' => 'width:10%;'),
),
...
),
));
...
Заказы отображаются в таблице в виде строки через запятую, вот так:
Наименование | № заказа(ов)
Записка 1 | 1045, 2036
Записка 2 | 7584, 3036
Записка 3 | 7789
Никак не могу сообразить что нужно написать в модели Note в методе search(), чтобы можно было фильтровать заказы как строку по LIKE. Напимер, при вводе в поле фильтра 036, должны показываться только строки с Записка 1 и Записка 2.
P.S.: за основу брался этот топик