2010-09-23 13 views
5

Có cách nào để tải đồ đạc có tham chiếu vòng tròn không? Ví dụ: Tôi có lịch thi đấu sau:Đồ đạc giáo lý - tham khảo vòng tròn

BusinessEntityTeam: 
    Nicole_Team: 
    name: Nicole's Team 
    Manager: [Nicole] 
    Business: [ACMEWidgets] 

sfGuardUser 
    Nicole: 
    first_name:  Nicole 
    last_name:  Jones 
    email_address: [email protected] 
    username:  nicole 
    password:  nicole 
    Groups:   [Group_abc] 
    Team:   [Nicole_Team] 

Như bạn thấy, Nicole_Team tham chiếu Nicole ... nhưng Nicole cũng tham chiếu Nicole_Team.

Khi người quản lý không phải là cột bắt buộc, điều này là OK (lịch thi đấu được tải, nhưng người quản lý là NULL), nhưng bây giờ nó là bắt buộc không thể tải vật cố.

Công việc duy nhất xung quanh tôi có thể thấy là đặt mối quan hệ nhóm trong đối tượng riêng của mình ('Hồ sơ' chẳng hạn) để các mối quan hệ không còn tròn nữa.

Có cách tiếp cận nào khác không? Mỗi người dùng phải ở trong một nhóm, nhưng chỉ một vài người dùng là người quản lý nhóm. Tôi khá cởi mở với thực tế là mô hình dữ liệu của tôi có thể được thiết kế tồi và có chỗ để cải thiện.

Trả lời

1

Làm thế nào về điều này:

BusinessEntityTeam: 
    Nicole_Team: 
    name: Nicole's Team 
    Business: [ACMEWidgets] 

sfGuardUser 
    Nicole: 
    first_name:  Nicole 
    last_name:  Jones 
    email_address: [email protected] 
    username:  nicole 
    password:  nicole 
    Groups:   [Group_abc] 
    Team:   [Nicole_Team] 
    ManagerFor:  [Nicole_Team] 

Để tránh tham khảo tròn, bạn cần phải đặt các mối quan hệ trong một mô hình.

+0

Cảm ơn câu trả lời của bạn. Tôi đã thử điều này, thêm một mối quan hệ hai chiều giữa BusinessEntityTeam và sfGuardUser để có một mối quan hệ với tham chiếu. Các vật cố tải không có lỗi được ném, nhưng giá trị vẫn là NULL – PeterB

+0

Tại sao bạn thêm một mối quan hệ hai chiều? Những gì tôi đã làm là để tránh một mối quan hệ như vậy. Nếu bạn muốn biết một người quản lý của nhóm, bạn sẽ phải viết một phương thức trong mô hình nhóm của bạn. chẳng hạn như hàm getManager() và tự mình thực hiện phương thức. Các sql nên được một cái gì đó như "chọn đầu 1 từ u người dùng, nơi u.manager_for =?" –

+0

Tôi đã phạm sai lầm. Bạn không cần tự viết phương thức getManager(). Và bạn không cần thêm mối quan hệ hai chiều. Mối quan hệ được tự động hai chiều. Ví dụ, bạn thêm một mối quan hệ từ User thành Team, sau đó bạn có hai phương thức: user-> getTeam() và team-> getUsers() tự động. Đối với ví dụ của bạn: sẽ có hai phương thức user-> getManagedTeam() và team-> getManager(). Tôi phải đọc schema.xml của bạn để cho bạn biết thêm chi tiết. –