4

のマニュアルページを確認しましたがCDbCriteria、十分な情報がありません。このプロパティはv1.1.7以降で使用可能であり、ヘルプが見つかりませんでした。Model->scopes「オンザフライ」で動的に変更するためですか?

4

2 に答える 2

14

スコープは、デフォルトで単純なフィルターを作成する簡単な方法です。スコープを使用すると、特定の列で結果を自動的に並べ替えたり、結果を制限したり、条件を適用したりできます。@ 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つのアイテムを取得します。もちろん、この例をデータベース内のほぼすべてのプロパティに拡張できます。乾杯

于 2011-06-30T14:01:44.337 に答える
4

はい。スコープを使用して、事前に作成された条件で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

于 2011-06-29T18:38:59.103 に答える