フィルタリングとCGridView
ウィジェットでソートはいくつかの手順で行うことができます
1.あなたのUser
モデルに仮想フィールドを追加します。 CGridViewで列を作成するために使用されます。それはまた、適切なフィルタリングのために必要とソート:
class User extends CActiveRecord
{
public $bioFullName;
//...
}
2.あなたのUser
モデルでsearch()
機能を変更します。配列パラメータをこの関数に追加し、このメソッドのオブジェクトを$criteria
オブジェクトに関連モデルとの接続に追加する必要があります。関連する属性のソートを追加するには、返されたCActiveDataProvider
も変更する必要があります。以下の何が起こるかを参照してください:
public function search($params = array()) // <-- new parameter that handling params for searching
{
$criteria = new CDbCriteria($param);
$criteria->with = array('biodata'); //add relation with Biodata to $criteria object
// ... existing $criteria conditions
$criteria->addSearchCondition('biodata.full_name', $this->bioFullName, true, 'AND'); // add comparison of biodata.full_name
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
// ...
'sort'=>array(
'attributes'=>array(
'bioFullName'=>array(// <-- sorting of related field
'asc'=>'biodata.full_name ASC',
'desc'=>'biodata.full_name DESC',
),
'*',
),
),
));
}
3.関連列を表示するために、あなたのビューでCGridView
ウィジェットを調整します。ウィジェット構成のcolumns
で配列モデル(bioFullName
)から仮想フィールドのような名前の列を追加します。
<?php
$this->widget('zii.widgets.grid.CGridView', array(
// ... other widget configuration options
'columns'=>array(
// ... other columns
'bioFullName'=>array(
'name'=>'bioFullName', // <-- name of virtual model field
'value'=>'$data->biodata->full_name', // <-- getting field value from relation
'header'=>'Full name', // <-- CGridView column header
),
// ... other columns
),
));
?>
あなた 'CGridView'コードを表示します。 – Justinas
私はあなたの 'User'テーブルに' biodata_id'なんかがあると思いますか? – aslawin