2011-07-02 85 views
7

我有一個具有類型HAS_MANY的與模型B. B的屬性的關係的模型中的:定義自定義排序標準()方法在Yii中

id, 
user_id, 
message, 
date, 
parent_message_id 

我需要模型B的元素,以按日期排序(降序)但是,如果parent_message_id與null不同,則需要考慮的日期應該是與parent_message_id對應的日期。

是否可以自定義用於訂購關係的標準?任何人都知道我能做到這一點?

+0

您可以先測試條件並根據結果使用不同的關係或範圍嗎? – ldg

+0

@ldg我不太確定,如果我明白你的意思,你能更具體一點嗎?或者提供一個例子?非常感謝您的回覆! – Soph

+0

如果要更改所有結果的排序順序,並且可以測試可能需要的任何條件,則可以根據需要添加一個作用域以更改排序順序。它可能會或可能沒有意義,您的需要,請參閱:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes – ldg

回答

10

好,我解決了這個方式如下:模型甲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

我認爲只能根據同一列對元素進行排序。然而,可能有一個數據庫忍者可以幫助你。

在完美的世界中,您可以使用afterFind()方法進行任何級別的任何自定義,不僅可以排序,還可以改變其他值。它可能並不像計劃訂單那樣快,但是這種方式可以從少量負載釋放MySQL服務器。另外它被自動調用。乾杯

+0

我看着你的建議但無法通過這種方式解決它!無論如何謝謝@Kor – Soph

+0

沒問題,隊友。希望你能設法找到解決方案。祝你好運 ;) – Korcholis