我对yii很新,我碰到了以下问题。我有2个相关表格, ClientTicket 和产品,结构如下:
这两个表通过将ClientTicket.product_id绑定到Product.id的外键相关联。
在ClientTicket的管理视图中,我设法包含两个产品列(品牌,型号),并为每个列显示搜索框,但过滤未按预期工作。例如:当我在两个搜索框(品牌,型号)中的任何一个中搜索时,另一个搜索框会自动填充我输入的相同值(因此没有搜索结果)。
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'product' => array(self::BELONGS_TO, 'Product', 'product_id'),
........
);
}
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
...
$criteria->compare('product.model',$this->product_id, true);
$criteria->compare('product.brand',$this->product_id, true);
...
$criteria->with=array(..., 'product',);
$criteria->together= true;
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination' => array('pageSize' => 10),
));
}
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'client-ticket-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'ticket_number',
'ticket_date',
array('name'=>'agent_id',
'header'=> 'Agent',
'value'=> '$data->ticket_agent->name',
'filter'=>CHtml::listData(Agent::model()->findAll(), 'name', 'name'),
),
...
array('name'=>'product_id',
'header'=> 'Product',
'value'=> '$data->product->model',
),
array('name'=>'product_id',
'header'=> 'Brand',
'value'=>'$data->product->brand'
),
答案 0 :(得分:0)
您的product
和brand
列都具有相同的name
但不同的values
。过滤器从name
获取字段名称,除非您明确说明它,即创建自己的活动字段。此外,您使用相同的属性product_id
来搜索search
函数中的两个字段。
Yii - how can I search by a column from foreign/related key on admin page?
已经回答了如何使用相关模型进行过滤答案 1 :(得分:0)
对于其他用户的参考,以下是我如何使用它。 再次,感谢 topher 以获得快速响应。 :)
修改了产品品牌专栏:
array('name'=>'product_id',
'header'=> 'Brand',
'value'=>'$data->product->brand'
),
到此:
array('name'=>'product.brand',
'header'=> 'Brand',
'filter'=>CHtml::activeTextField($model,'brand'),
),