私は2,3ヶ月前からYiiで遊んでいて、コードはYiiのように構成しています。モデルを他のモデルのリストにするにはどうすればいいのでしょうか?CModelリストへのYiiの方法(他のCModelリストの有無)は何ですか?
Yiiは概念的にはDAOに非常に近いモデルを持っているようですが、MVC設計は非DAOモデルをモデル以外の場所に置かないようにしています。
2の理由(私はMVCの専門家でない)、リストが良いです:
- 私は取り組むことができないロジックのかなりの量を持つオブジェクトを持ったときに拡張するCModelListのようなものを探していますの関係(いずれにしてもCActiveRecord要素)
- リストはタイプとしてロジックに適用できますが、すべてを同時にメモリにロードする必要はなく、ids aいないすべてのモデルは
- CAttributeCollectionアクティブレコードですので:それだけのようなメモリ内のすべてのオブジェクトをサポートしているので、ND
- Relational Active Record問題を解決していないようだ何
サブセットのみをロード配列
- getRestaurantsAverageRatingByPriceRangeなどの異なるモデル内の同じメソッド:これはOOP内の関数型プログラミングがモードとして急速に成長しているためですLSは、複数の方法
例1
$user = User::model()->findByPk($userID); // get a user
$restaurantList = $user->getRestaurants(); // get restaurants for that user
for($i=0;$i<5;$i++) {
$this->renderPartial("rating",
array("rating" => $restaurantList->getAverageRatingByPriceRange($i));
}
例2(同じリストロジック、異なるベースモデル)
$city = City::model()->findByPk($cityID); // get a city
$restaurantList = $city->getRestaurants(); // get restaurants for that city
for($i=0;$i<5;$i++) {
$this->renderPartial("rating",
array("rating" => $restaurantList->getAverageRatingByPriceRange($i));
}
例3(同じリストのタイプを持っているとベースモデル、別ロジック)
$user = User::model()->findByPk($userID); // get a user
$restaurantList = $user->getRestaurants(); // get restaurants for that user
$this->renderPartial("map",
array("coord" => $restaurantList->getCoordinatesMap());
私は違った考え方をするか、きちんとしたコードと構造を使用して維持するためのメカニズムは何ですか?コンポーネントの動作の
異なるタイプのデータに対して同じメソッドを使用できます。私は主に、関連するデータ(論理ではない)と事前定義されたクエリ/フィルタリングのスコープ(必要に応じて組み合わせることができます)を取得するためにリレーションを使用しますが、ARでオーバーヘッドが発生し、とにかくcreateCommand。 – ldg
ありがとうございました。これまで私がやったことですが、これらのクラスをモデルにしたいと思います。私は、CModelを拡張するCModelListクラスを作成することを考えています。ちょうど私がYiiを間違って取得していないことを確認したい。私のアプリはすでに80%構築されているので、私はリファクタリングを計画しています。 –
私は同様の要件と同じ考えを持っていますが、最後にはCModelの余分なオーバーヘッドがそれに見合うものではないため、カスタムコンポーネントを使い、いくつかのモデルを拡張しました。私は確かにあなたが思いつくものを見て興味があるでしょう。 – ldg