2011-07-02 12 views
7

Tôi có một mô hình Một mà có một mối quan hệ kiểu has_many với mô hình B. thuộc tính B:Xác định tiêu chí tùy chỉnh trật tự trong các mối quan hệ() phương pháp trong Yii

id, 
user_id, 
message, 
date, 
parent_message_id 

tôi cần các yếu tố của mô hình B được sắp xếp theo ngày (giảm dần) NHƯNG, trong trường hợp parent_message_id khác với null, ngày được xem xét phải là ngày tương ứng với parent_message_id.

Có thể tùy chỉnh tiêu chí được sử dụng để đặt hàng mối quan hệ không? Bất kỳ ai biết làm thế nào tôi có thể để điều này?

+0

bạn có thể kiểm tra điều kiện trước và sử dụng một mối quan hệ hoặc phạm vi khác tùy thuộc vào kết quả không? – ldg

+0

@ldg Tôi không hoàn toàn chắc chắn nếu tôi hiểu ý bạn, bạn có thể cụ thể hơn một chút không? Hoặc cung cấp một ví dụ? Cảm ơn bạn đã trả lời! – Soph

+0

Nếu bạn muốn thay đổi thứ tự sắp xếp của tất cả các kết quả và có thể kiểm tra bất kỳ điều kiện nào có thể yêu cầu, bạn có thể thêm phạm vi phù hợp để thay đổi thứ tự sắp xếp. Nó có thể hoặc có thể không có ý nghĩa cho nhu cầu của bạn, xem: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes – ldg

Trả lời

10

Ok, tôi giải quyết này theo cách sau: mô hình Một mô hình has_many B, do đó, tôi xác định lại phương pháp các mối quan hệ như sau:

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

Vì vậy, tôi chỉ so sánh ngày của những tin nhắn không có ID cha mẹ. Nhược điểm là tôi phải truy cập vào "tin nhắn con" của mỗi bài viết ... nhưng tốt, không thể tìm thấy cách giải quyết khác. Cảm ơn tất cả vì sự giúp đỡ của bạn!

0

Tôi nghĩ rằng chỉ có thể sắp xếp các phần tử theo cùng một cột. Tuy nhiên có thể có một ninja cơ sở dữ liệu có thể giúp bạn.

Trong một thế giới hoàn hảo, bạn có thể sử dụng phương pháp afterFind() cho mọi tuỳ chỉnh ở mọi cấp độ, không chỉ phân loại mà còn thay đổi một số giá trị cho người khác. Nó không phải là nhanh như một thứ tự kế hoạch, có lẽ, nhưng theo cách này bạn phát hành máy chủ MySQL từ một tải nhỏ. Thêm vào đó nó được gọi tự động. Chúc mừng

+0

Tôi đã xem xét đề xuất của bạn nhưng không thể giải quyết nó theo cách này! Thanks anyway @Kor – Soph

+0

Không sao, bạn đời. Hy vọng rằng bạn có thể quản lý để tìm một giải pháp. Chúc may mắn ;) – Korcholis