ホームページ > php教程 > PHP开发 > Yii におけるリレーションデータ相関クエリと統計関数の使用方法の詳細な説明

Yii におけるリレーションデータ相関クエリと統計関数の使用方法の詳細な説明

高洛峰
リリース: 2016-12-30 16:15:09
オリジナル
1352 人が閲覧しました

この記事の例では、Yii での関係データ相関クエリと統計関数の使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

関連クエリ、Yii はいわゆる統計クエリ (または集計クエリ) もサポートしています。 これは、各投稿のコメント数、各製品の平均評価など、関連するオブジェクトに関する集計情報を取得することを指します。 統計クエリは、HAS_MANY (たとえば、投稿に多数のコメントがある) または MANY_MANY (たとえば、投稿が多数のカテゴリに属し、カテゴリに多数の投稿がある) に関連付けられたオブジェクトに対してのみ実行されます。

統計クエリの実行は、前述の相関クエリと非常に似ています。まず、CActiveRecord の relationship() メソッドで統計クエリを宣言する必要があります。

class Post extends CActiveRecord
{
  public function relations()
  {
    return array(
      'commentCount'=>array(self::STAT, 'Comment', 'post_id'),
      'categoryCount'=>array(self::STAT, 'Category', 'post_category(post_id,category_id)'),
    );
  }
}
ログイン後にコピー

関連クエリ名前空間

関連クエリは名前空間を使用して実行することもできます。 2 つの形式があります。最初の形式では、名前空間がメイン モデルに適用されます。 2 番目の形式では、名前空間がリレーショナル モデルに適用されます。

以下のコードは、メイン モデルに名前空間を適用する方法を示しています。

$posts=Post::model()->published()->recently()->with('comments')->findAll();
ログイン後にコピー

これは、非連想クエリと非常によく似ています。唯一の違いは、名前空間の後に with() 呼び出しを使用することです。 このクエリは、最近公開された投稿とそのコメントを返す必要があります。

以下のコードは、関連付けられたモデルに名前空間を適用する方法を示しています。

$posts=Post::model()->with('comments:recently:approved')->findAll();
ログイン後にコピー

上記のクエリは、すべての投稿とそのモデレートされたコメントを返します。コメントは関連付け名を参照するのに対し、最近と承認済みは Comment モデル クラスで宣言された名前空間を参照することに注意してください。アソシエーション名と名前空間はコロンで区切る必要があります。


名前空間は、CActiveRecord::relations()で宣言された関連付けルールのwithオプションでも指定できます。以下の例では、$user->posts にアクセスすると、この投稿のモデレートされたすべてのコメントが返されます。

class User extends CActiveRecord
{
  public function relations()
  {
    return array(
      'posts'=>array(self::HAS_MANY, 'Post', 'author_id', 'with'=>'comments:approved'),
    );
  }
}
ログイン後にコピー

この記事が皆さんの Yii フレームワークをベースにした PHP プログラムの設計に役立つことを願っています。

Yii での関係データ相関クエリと統計関数の使用法に関する詳細な説明については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート