ホームページ  >  記事  >  バックエンド開発  >  Yii フレームワークのゴミの名前付き範囲 NAMED SCOPE_PHP チュートリアル

Yii フレームワークのゴミの名前付き範囲 NAMED SCOPE_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:10:06862ブラウズ

名前付き範囲
注: 名前付き範囲のサポートはバージョン 1.0.5 から始まります。 名前付きスコープの元のアイデアは、Ruby on Rails から生まれました。
名前付きスコープは名前付きクエリ ルールを表し、他の名前付きスコープと組み合わせて使用​​したり、アクティブ レコード クエリに適用したりできます
名前付きスコープは、主に CActiveRecord::scopes() メソッドの名前とルールのペアの形式で宣言されます。次のコードは、Post モデル クラスで 2 つの名前付きスコープを宣言します
最近出版されたもの。
クラス Post extends CActiveRecord
{

パブリック関数のスコープ()
{
return array(
'公開'=>array(
'条件'=>'ステータス=1',
)、
'最近'=>array(
'order'=>'create_time DESC',
'制限'=>5,
)、
);
}
}
具体的な使用法: $posts=Post::model()->published()->recently()->findAll();
注: 名前付きスコープはクラスレベルのメソッドでのみ使用できます。つまり、このメソッドは ClassName::model() を使用して呼び出す必要があります。

パラメータ化された名前付き範囲
名前付き範囲はパラメータ化できます。たとえば、これを達成するには、CActiveRecord::scopes ではなく、最近名前を付けたスコープで指定された投稿の数をカスタマイズしたいと考えています
メソッド内で名前付き範囲を宣言する代わりに、名前付き範囲と同じ名前のメソッドを定義する必要があります:
最近の公開関数($limit=5)
{
$this->getDbCriteria()->mergeWith(array(
) 'order'=>'create_time DESC',
'limit'=>$limit,
));
$this を返します;
}
次に、次のステートメントを使用して、最新の 3 つの投稿を取得します。
$posts=Post::model()->published()->recently(3)->findAll();//上記のコードでは、デフォルトで最近公開された 5 つの投稿が取得されます。

デフォルトの範囲
モデル クラスには、このモデルに関するすべてのクエリ (関連するクエリを含む) に適用されるデフォルトのスコープを持つことができます。たとえば、複数の言語をサポートする Web サイトでは、
のみを表示したい場合があります。 現在のユーザーが指定した言語でコンテンツを表示します。 この Web サイトのコンテンツに関するクエリは多数ある可能性があるため、この問題を解決するためにデフォルトのスコープを定義できます。 本当です
この目的のために、次のように CActiveRecord::defaultScope メソッドをオーバーライドします。 class Content は CActiveRecord を拡張します
{
パブリック関数defaultScope()
{
return array(
'condition'=>" language='".Yii::app()-> language."'",
);
}
}

これで、次のメソッドが呼び出される場合、上記で定義されたクエリ ルールが自動的に使用されます: $contents=Content::model()->findAll();

実用的なアプリケーション
上記はいくつかの公式の例です。参考のために私自身が使用した例を以下に示します。
テーブル:

school:id(pk,int),name(varchar) //学校

class:id(pk,int),name(varchar),s_id(fk,int) //クラス
Student:id(pk,int),name(varchar),s_id(int),c_id(int) //学生

例: クエリは学校「a」のすべてのクラスを対象としています。この時点では、簡単に呼び出すために、最初に School モデルの relationship メソッドで関係を定義できます。 パブリック関数の関係()
{
配列を返します(
'class'=>array(self::HAS_MANY, 'Class', 's_id'),
);
}
パブリック関数のスコープ()
{
配列を返します(
'getAllClass'=>array(
'with'=>'クラス',
)、
};
}
パブリック関数 getAllClass($name)
{
$this->getDbCriteria()->mergeWith(array(
) '条件'=>"t.name=$name",
));
$this を返します;

}

使用: School::model()->getAllClass("a")->findAll();

http://www.bkjia.com/PHPjc/477592.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477592.html技術記事名前付き範囲注: 名前付き範囲のサポートはバージョン 1.0.5 から始まります。 名前付きスコープの元のアイデアは、Ruby on Rails から来ています。名前付きスコープは名前付きクエリを表します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。