在relations()方法中定义自定义排序条件

时间:2011-07-02 22:13:36

标签: database sorting yii relation

我有一个模型A,其关系类型HAS_MANY与模型B

B的属性是:

id,
user_id,
message,
date,
parent_message_id

我需要按日期(降序)排序模型B的元素,但是如果parent_message_id与null不同,则要考虑的日期应该是与{对应的日期} {1}}。

是否可以自定义用于订购关系的标准?

2 个答案:

答案 0 :(得分:10)

好的,我通过以下方式解决了这个问题:模型A HAS_MANY模型B,因此,我将关系方法重新定义为以下内容:

public function relations()
{
    return array(
        'messages' => array(self::HAS_MANY, 'WallMessages', 'liga_id',
            'condition'=>'specific_post.parent_message_id IS NULL', 
            'order'=>'specific_post.date DESC', 
            'alias'=>'specific_post'),
    );
}

因此,我只比较那些没有父ID的消息的日期。缺点是我必须访问每个帖子的“子消息”......但是,找不到另一种解决方法。谢谢大家的帮助!

答案 1 :(得分:0)

我认为只能根据同一列对元素进行排序。但是,可能有一个数据库忍者可以帮助你。

在完美的世界中,您可以使用afterFind()方法在任何级别进行任何自定义,不仅可以进行排序,还可以为其他级别更改某些值。它可能没有计划订单那么快,但这样你就可以从一点负载中释放MySQL服务器。另外,它会自动调用。干杯