私は yii にかなり慣れていないので、次の問題にぶつかりました。次の構造を持つ 2 つの関連テーブルClientTicketとProductがあります。
クライアントチケット
- ID
- チケット名
- クライアントID
- 製品番号
製品
- ID
- タイプ
- モデル
- ブランド
2 つのテーブルは、ClientTicket.product_id を Product.id にバインドする外部キーによって関連付けられています。
問題
ClientTicket の管理ビューで、2 つの製品列 (ブランド、モデル) を含め、それぞれの検索ボックスを表示することができましたが、フィルタリングが期待どおりに機能していません。例: 2 つの検索ボックス (ブランド、モデル) のいずれかで検索すると、入力したのと同じ値がもう一方のボックスに自動的に入力されます (したがって、検索結果はありません)。
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'
),