のマニュアルページを確認しましたがCDbCriteria
、十分な情報がありません。このプロパティはv1.1.7以降で使用可能であり、ヘルプが見つかりませんでした。Model->scopes
「オンザフライ」で動的に変更するためですか?
2 に答える
スコープは、デフォルトで単純なフィルターを作成する簡単な方法です。スコープを使用すると、特定の列で結果を自動的に並べ替えたり、結果を制限したり、条件を適用したりできます。@ ldgが提供するリンクには、それらがいかに優れているかを示す大きな例があります。
$posts=Post::model()->published()->recently()->findAll();
誰かが最近公開されたすべての投稿を1行で取得しています。インライン条件(たとえばPost::model()->findAll('status=1')
)よりも保守が簡単で、各モデル内にカプセル化されているため、透明性が高く、使いやすさが向上しています。
さらに、次のような独自のパラメータベースのスコープを作成できます。
public function last($amount)
{
$this->getDbCriteria()->mergeWith(array(
'order' => 't.create_time DESC',
'limit' => $amount,
));
return $this;
}
このようなものをモデルに追加すると、データベースから取得するオブジェクトの量を選択できます(作成時間でソートされます)。オブジェクト自体を返すことにより、メソッドの連鎖を許可します。
次に例を示します。
$last3posts=Post::model()->last(3)->findAll();
最後の3つのアイテムを取得します。もちろん、この例をデータベース内のほぼすべてのプロパティに拡張できます。乾杯
はい。スコープを使用して、事前に作成された条件でCDbCriteriaの属性を変更したり、パラメーターを渡すこともできます。1.1.7より前では、model()クエリでそれらを使用でき、一緒にチェーンすることができます。参照: http ://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes
1.1.7以降、スコープをCDbCriteriaプロパティとして使用することもできます。参照:http ://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes