开发者

Define a custom ordering criteria in the relations() method

I have a model A that has a relationship of type HAS_MANY with model B.

B's attributes are:

id,
user_id,
message,
date,
parent_message_id

I need elements of model B to be ordered by date (desc开发者_运维问答ending), but in case the parent_message_id is different from null, the date to be taken into consideration should be the date corresponding to parent_message_id.

Is it possible to customize the criteria used to order the relation?


Ok, i solved this the following way: model A HAS_MANY model B, therefore, i redefined the relationships method to the following:

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'),
    );
}

Therefore, I only compare the date of those messages with no parent id. The downside is that I have to access each post's "child messages"... but well, couldn't find another workaround. Thanks all for your help!


I think it is only possible to sort elements according to the same column. However there might be a database ninja that could help you.

In an perfect world you could use the afterFind() method for any customization at any level, not only sorting, but also changing some values for others. It is not as fast as a plan order, maybe, but this way you release the MySQL server from a little load. Plus it is called automatically. Cheers

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜