2011-03-08 43 views
5

Tôi thấy tất cả các loại cách khác nhau để xử lý nhiều mối quan hệ trong Yii. Tuy nhiên, những ví dụ mà tôi thấy không hoàn toàn xác thịt và tôi cảm thấy mình đang thiếu một cái gì đó.Nhiều quan hệ với nhiều người

Ví dụ, hướng dẫn Larry Ullman của không sử dụng mối quan hệ tự :: MANY_MANY - http://www.larryullman.com/2010/08/10/handling-related-models-in-yii-forms/

Vì vậy, như xa như thêm và lấy hồ sơ, whats cách tiêu chuẩn để xử lý nhiều nhiều trong Model, điều khiển và Lượt xem?

làm rõ: Tôi giả sử Im tìm kiếm một ví dụ liên quan đến 2 bảng, liên quan đến nhiều người, nơi tôi có thể thấy không chỉ cả hai mô hình, bộ điều khiển và chế độ xem nên tôi hoàn toàn có thể hiểu những gì đang diễn ra.

+1

Không rõ chính xác bạn đang hỏi gì ... – Jon

Trả lời

5

Bạn thực sự cần 3 bảng (do đó, một mô hình bổ sung cho bảng tổng hợp), nhưng một khi bạn có nó, bạn thực sự có thể sử dụng chức năng quan hệ yii thông thường.

Ví dụ: dự án của tôi có mối quan hệ nhiều-nhiều giữa Mua và Giao dịch (vui lòng không hỏi tại sao :)). Vì vậy, có một mô hình mua hàng, một mô hình giao dịch và một mô hình PurchaseToTransaction thiết lập các liên kết giữa chúng. Tôi chỉ có thể làm một $ oPurchase-> giao dịch và Yii sẽ xử lý nhiều-nhiều phần bằng cách sử dụng mối quan hệ, nó được định nghĩa như sau:

'transactions' => array(self::MANY_MANY, 'Transaction', 'PurchaseToTransaction(purchaseId, transactionId)') 

Lưu ý rằng đối với các giao dịch, tương tự áp dụng nhưng khác con đường xung quanh:

'purchases' => array(self::MANY_MANY, 'Purchase', 'PurchaseToTransaction(transactionId, purchaseId)'), 

Vì vậy, cả hai $ oPurchase-> giao dịch$ oTransaction-> mua sẽ tự động được xử lý bởi Yii.

Trong kết luận nó thực sự có thể xử lý nhiều-nhiều bằng cách sử dụng các mối quan hệ (ít nhất là phần đọc, để viết bạn vẫn cần các giải pháp tùy ý).

+0

tuyệt vời, cảm ơn vì điều đó! – djt

+0

và các giải pháp tùy ý này sẽ là gì? Ngoài ra, tôi có phải tạo một mô hình cho bảng cầu không? – djt

+0

có bạn phải tạo mô hình, nhưng nó chỉ có thể là một mô hình rỗng với tên của bảng tổng hợp, không có logic nữa. Những gì các giải pháp khác có liên quan, có hành vi này ví dụ: http://www.yiiframework.com/extension/save-relations-ar-behavior/ cũng các phiên bản Yii cuối cùng sẽ bao gồm chức năng nâng cao: http: // code. google.com/p/yii/issues/detail?id=1117 – Blizz

0

Tôi chỉ đang sử dụng Yii. Chỉ cần ý tưởng cơ bản. Nếu bạn nghĩ rằng Một đến nhiều không phải là vấn đề thì bạn cần phải tạo một bảng ở giữa giống như cho Người dùng và Đơn đặt hàng, tạo bảng UsersOrders để ánh xạ các khóa đó. Sau đó, tạo hàm để lấy các bảng có liên quan đó trong lớp như $ this-> UsersOrders-> Orders() cho hàm Đơn đặt hàng trong User lớp, ngược lại.

Nhiều người thực sự được thêm 3 bàn. 2 bảng nhưng cộng với bảng ẩn ở giữa.

+0

đúng Tôi biết về bảng thứ 3, nhưng tôi chỉ tự hỏi liệu Yii có cách để đối phó với Nhiều người theo cách đơn giản bằng cách sử dụng các mối quan hệ hoặc một cái gì đó – djt

+0

Ok, nếu Yii không xử lý nó. Chúng ta có thể mở rộng bộ điều khiển để có $ $-> Orders() trong bộ điều khiển Users để lấy danh sách tất cả các lệnh, cũng như các chức năng khác để thêm/xóa mối quan hệ. – CallMeLaNN

+0

Nhưng Yii ** không ** xử lý nó. Kiểm tra tài liệu. –

Các vấn đề liên quan