我不确定在以下情况下使用的正确逻辑。这种情况会在我的应用程序中出现几次,我认为,其他人也可能会遇到这种情况。
在Yii中,我有一个返回CActiveRecord的loadModel函数。
功能如下:
$model=Product::model()->with('performance','subcategory','sponsor')->findByPk($id);
正如你所看到的,我热切地呼唤着三种关系。其中一个关系 - 表现 - 是一个HAS_MANY关系,与产品的用户评论有关。
因此,对于产品x,可能有100条评论都有不同的日期和分数。
我想做的是:
逻辑上的混乱是这样的。
我应该在我的模型类中创建一个函数,该函数通过$model->performance
来获取最新信息(#2)。
我是否应该为这段精炼的数据创建一个完全独立的关系。
CListView中的每个产品都需要这个最新的评论数据,并且ListView需要按此数据进行排序。因此,似乎需要将其直接附加到传递给视图的产品活动记录中。
从表现的角度和逻辑的角度来看,我该如何处理?
顺便说一句,这是我尝试使用的当前代码无效:
public function scopes()
{
return array(
'recentPerf'=>array(
'condition'=>'perf_date > ' . strtotime('-120 days', strtotime(new CDbExpression('NOW()'))),
'order'=>'perf_date DESC',
'limit'=>1,
)
);
}
提前感谢您的任何建议!
Uday的答案让范围有效 - 现在使用范围的正确方法是什么? 我应该用当前模型传递这个金额吗?
即。我可以将其附加到:
$model=Product::model()->with('performance','subcategory','sponsor')->findByPk($id);
? 我如何测试以确保它有效:
$maxPerformance = ProdPerformance::model()->recentPerf()->find();
然后将该变量传递给视图。这似乎是处理这种情况的一种非常“不洁净”的方式。是否应该使用原始$model
变量传递?
答案 0 :(得分:0)
我不确定,但可能跟随线有一个问题
'condition'=>'perf_date > ' . strtotime('-120 days', strtotime(new CDbExpression('NOW()'))),
condition是要发送到mysql的数据所以日期字符串应该是MySQL格式而不是PHP,试试这个
'condition'=>'perf_date > CURRENT_DATE - INTERVAL 120 DAYS',