我有一個具有類型HAS_MANY的與模型B. B的屬性的關係的模型中的:定義自定義排序標準()方法在Yii中
id,
user_id,
message,
date,
parent_message_id
我需要模型B的元素,以按日期排序(降序)但是,如果parent_message_id與null不同,則需要考慮的日期應該是與parent_message_id對應的日期。
是否可以自定義用於訂購關係的標準?任何人都知道我能做到這一點?
我有一個具有類型HAS_MANY的與模型B. B的屬性的關係的模型中的:定義自定義排序標準()方法在Yii中
id,
user_id,
message,
date,
parent_message_id
我需要模型B的元素,以按日期排序(降序)但是,如果parent_message_id與null不同,則需要考慮的日期應該是與parent_message_id對應的日期。
是否可以自定義用於訂購關係的標準?任何人都知道我能做到這一點?
好,我解決了這個方式如下:模型甲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'),
);
}
因此,我只比較,沒有這些消息的日期父母身份。缺點是我必須訪問每個帖子的「子帖子」......但是,無法找到另一個解決方法。感謝你的幫助!
我認爲只能根據同一列對元素進行排序。然而,可能有一個數據庫忍者可以幫助你。
在完美的世界中,您可以使用afterFind()方法進行任何級別的任何自定義,不僅可以排序,還可以改變其他值。它可能並不像計劃訂單那樣快,但是這種方式可以從少量負載釋放MySQL服務器。另外它被自動調用。乾杯
您可以先測試條件並根據結果使用不同的關係或範圍嗎? – ldg
@ldg我不太確定,如果我明白你的意思,你能更具體一點嗎?或者提供一個例子?非常感謝您的回覆! – Soph
如果要更改所有結果的排序順序,並且可以測試可能需要的任何條件,則可以根據需要添加一個作用域以更改排序順序。它可能會或可能沒有意義,您的需要,請參閱:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes – ldg