我对yii很陌生,遇到了以下问题。我有两个相关的表,clientticket和product,结构如下:
客户票据
身份证件
票证名称
客户ID
产品ID
产品
身份证件
类型
模型
品牌
这两个表通过外键关联,外键将clientticket.product_id绑定到product.id。
问题
在clientticket的管理视图中,我成功地包含了两个产品列(brand,model),并为每个产品列显示了搜索框,但是过滤并没有按预期工作。例:当我在两个搜索框(品牌、型号)中的任何一个搜索时,另一个会自动填充我键入的相同值(因此没有搜索结果)。
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),
    ));
}

clientticket管理视图文件:
<?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'
        ),

最佳答案

您的productbrand列都有相同的name但不同的values。过滤器从name获取字段名,除非您显式声明它,即创建自己的活动字段。此外,您使用相同的属性product_id搜索search函数中的两个字段。
如何使用相关模型进行筛选在Yii - how can I search by a column from foreign/related key on admin page?

08-18 14:00