Определите пользовательские критерии заказа в методе Relations () - PullRequest
7 голосов
/ 03 июля 2011

У меня есть модель A, которая имеет тип HAS_MANY с моделью B.

B атрибуты:

id,
user_id,
message,
date,
parent_message_id

Мне нужно, чтобы элементы модели B были упорядочены по дате (по убыванию), но в случае, если parent_message_id отличается от нуля, дата, которая должна приниматься во внимание, должна быть датой, соответствующей parent_message_id.

Можно ли настроить критерии, используемые для заказа отношения?

Ответы [ 2 ]

10 голосов
/ 09 июля 2011

Хорошо, я решил это следующим образом: модель 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'),
    );
}

Поэтому я сравниваю только дату этих сообщений без родительского идентификатора. Недостатком является то, что я должен получить доступ к "дочерним сообщениям" каждого сообщения ... но хорошо, я не мог найти другой обходной путь. Спасибо всем за помощь!

0 голосов
/ 04 июля 2011

Я думаю, что можно сортировать элементы только по одному столбцу.Однако может быть ниндзя базы данных, которая может вам помочь.

В идеальном мире вы можете использовать метод afterFind () для любой настройки любого уровня, не только сортировки, но и изменениянекоторые ценности для других.Возможно, это не так быстро, как плановый заказ, но таким образом вы освобождаете сервер MySQL от небольшой нагрузки.Плюс это вызывается автоматически.Приветствия

...