0

Active Record パターンを ORM ベースとして実装するyiiフレームワークを使用しています。テーブルの列を反映する属性を持つテーブル ラッパー クラスである CActiveRecord クラスがあります。したがって、このクラスの各オブジェクトはデータベースの行を表します。

Wikiは Active Record パターンについて次のように述べています。

アクティブ レコードは、データベース内のデータにアクセスするためのアプローチです

データベース テーブルまたはビューは、クラスにラップされます。したがって、オブジェクト インスタンスはテーブル内の 1 つの行に関連付けられます。

ここまでは順調ですね。

しかし、たとえば統計データを取得する複雑な生の SQL クエリをどこに配置すればよいでしょうか?

そして、より一般的には、アクティブなレコード オブジェクトにできないデータ (集計クエリで取得したデータなど) を取得するメソッドをどこに配置する必要がありますか? たとえば、オブジェクトではなく配列を取得したくない場合はどうすればよいでしょうか?

4

4 に答える 4

1

また、複雑なクエリについては、必要に応じていつでも DAO を使用できます: http://www.yiiframework.com/doc/guide/1.1/en/database.dao

しかし、ほとんどの場合、CDbCriteria はニーズに適合します。詳細については、 http ://www.larryullman.com/2013/07/24/using-cdbcriteria-in-the-yii-framework/ を参照してください。

于 2013-09-13T11:26:27.090 に答える
0

あなたが望むものに応じて、多くの可能性があります。Yii には関連オブジェクトにアクセスするための関係があり、関係タイプの 1 つは統計関係です。このリンクを確認してください: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#statistical-query

countネーミング スコープを使用して結果の一部をフィルタリングし、example関数を呼び出して、フィルタリングされた結果の数を取得することもできます (これはselect count(*) ...、すべてのエントリをフェッチするのではなく、db サーバーに送信することによって行われるため、非常に便利です)。名前付きスコープについては、これを確認してください: http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

統計データがモデルに関連している場合 (たとえば、一部のクライアントによる総支出など) (これは統計的関係を使用して簡単に行うことができます)、次のようにパブリック関数をモデル クラスに直接追加できます。

public function getTotalSpending() {
    return 0; // or whatever you need to calculate here
}

最後に、ビジネス ロジックをテーブルに直接マップすることは良い方法とは見なされません。代わりに、サブクラス化CModelまたはCFormModelクラスによってモデルを作成し、データを取得/変更するパブリック メソッドを追加します (CActiveRecordクラスを継承する他のモデルを使用する可能性があります)。

于 2013-09-13T10:47:16.680 に答える
0

CArrayDataProvideを使用する

生データ配列の要素は、オブジェクト (モデル オブジェクトなど) または連想配列 (DAO のクエリ結果など) のいずれかです。keyField プロパティを、データ レコードを一意に識別するフィールドの名前に設定するか、そのようなフィールドがない場合は false に設定してください。

ソース: http://www.yiiframework.com/doc/api/1.1/CArrayDataProvider

于 2013-09-13T10:47:25.223 に答える
0

Active Record パターンを使用しないでください。

于 2013-09-22T22:24:37.777 に答える