我已经用 Yii 玩了几个月了,为了以 Yii 的方式构建代码,我想知道如何最好地让模型成为其他模型的列表。
Yii 在概念上似乎有非常接近 DAO 的模型,而 MVC 设计推动不要将非 DAO 模型放在模型之外的任何地方。(我不是 MVC 专家)
2个原因,列表很好:
- 我正在寻找像CModelList这样的东西来扩展当对象具有相当数量的逻辑而无法通过关系处理时(无论如何这是一个 CActiveRecord 元素)
- 列表作为一种类型可以将逻辑应用于元素,而不必一次将它们全部加载到内存中,并且仍然提供单一类型以在具有ids 的代码中使用并仅加载子集
什么似乎没有解决问题
- 关系活动记录:因为并非所有模型都是活动记录
- CAttributeCollection:因为它只支持内存中的所有对象,如数组
- 不同模型中的相同方法,例如 getRestaurantsAverageRatingByPriceRange:因为随着模型有更多方法,OOP 中的函数式编程增长迅速
示例 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() );
那么 Yii 中是否缺少它,我应该开始以不同的方式思考,或者使用和保持干净代码和结构的机制是什么?