Yii中相关模型中的STAT关系

时间:2012-02-01 14:07:33

标签: php yii

我不确定在以下情况下使用的正确逻辑。这种情况会在我的应用程序中出现几次,我认为,其他人也可能会遇到这种情况。

在Yii中,我有一个返回CActiveRecord的loadModel函数。

功能如下:

$model=Product::model()->with('performance','subcategory','sponsor')->findByPk($id);

正如你所看到的,我热切地呼唤着三种关系。其中一个关系 - 表现 - 是一个HAS_MANY关系,与产品的用户评论有关。

因此,对于产品x,可能有100条评论都有不同的日期和分数。

我想做的是:

  1. 提取所有效果数据(所有100条评论)
  2. 提取最新的效果数据分数(只要在过去120天内提交)
  3. 逻辑上的混乱是这样的。 我应该在我的模型类中创建一个函数,该函数通过$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变量传递?

1 个答案:

答案 0 :(得分:0)

我不确定,但可能跟随线有一个问题

'condition'=>'perf_date > ' . strtotime('-120 days', strtotime(new CDbExpression('NOW()'))),

condition是要发送到mysql的数据所以日期字符串应该是MySQL格式而不是PHP,试试这个

'condition'=>'perf_date > CURRENT_DATE - INTERVAL 120 DAYS',