2011-11-14 21 views
2

比較演算子を使用して、グリッドビューに表示されるアイテムの結果を制限します。以下のようなyii CGridViewと比較演算子

何か:

$model->dateEnd >= date("Y-m-d"); 

は私がそうすることをコントローラで行うことができるものはありますか?それとも、モデルの検索方法で行う必要がありますか?

答えて

0

CGridViewに表示された結果を追加条件でデータプロバイダにフィルタリングします。例:

$dataProvider=new CActiveDataProvider('Post', array(
    'criteria'=>array(
    'condition'=>'dateEnd >= NOW()', 
), 
    'pagination'=>array(
    'pageSize'=>20, 
), 
)); 

CActiveDataProviderドキュメントにはさらに詳しい情報があります。

$models->after($date); 

Yii Guideはこのようなモデルで指定されたスコープを実装する方法を示しています:

+0

John Watson現在、私は検索方法でフィルタリングしていますが、コントローラに移動できるかどうかは疑問です。私はそれが必要な場合は、コントローラに追加すると私はできると思いますか?コントローラ内で比較演算子を使用しない場合は、$ model-> dateEnd = date( "Y-m-d")と同じくらい単純です。だから私はそれが比較演算子のためにもうまくいくかどうか疑問に思っていましたか? – enfield

+0

私はそれがあなたのコントローラにあるべきだと思います。あなたは現在どこにいますか?景色? –

+0

特定のモデル(dateEndフィールド付き)に適していますが、多くのビューやコントローラ(そのモデルとやりとりする、または関連するビューやコントローラ)全体で役に立つフィルタであるため、モデル「名前付きスコープ」の実装ではセンス? – hobs

0

あなたは、あなたが求めているものに似た構文で使用される「パラメータ化された名前のスコープ」を設定することができます

public function after($date='2011-11-11') 
{ 
    $this->getDbCriteria()->mergeWith(array(
     'condition'=>'dateEnd >= :endDate', 
     'params' => array(":endDate"=>"%$date%") 
     )); 
    return $this; 
} 
+0

そして、次のようにパラメータ化された名前付きスコープを複数組み合わせることができます: '$ models-> after( '2011-11-11') - > before( '2011-12-31')' – hobs