Trong cơ sở dữ liệu của tôi, tôi có 5 bảng:Yii nhiều mối quan hệ
- trò chơi (game_id, tên, ...)
- thẻ (TAG_ID, tên, ...)
- bộ sưu tập (coll_id, tên, ...)
- collections_tags (id, coll_id, TAG_ID)
- game_tag (id, game_id, TAG_ID)
Mỗi trò chơi có nhiều thẻ, bộ sưu tập có nhiều thẻ. Nếu tôi lấy một bộ sưu tập, tôi có thể tìm thấy các trò chơi của mình bằng cách sử dụng các thẻ của bộ sưu tập.
Tôi đang cố gắng để thực hiện nhiệm vụ này có quan hệ yii:
//in Collection's relations:
'tags'=>array(self::MANY_MANY, 'Tag', 'collections_tags(coll_id,tag_id)'),
'games'=>array(self::HAS_MANY, 'Game','tag_id', 'through'=>'tags')
Sau đó, tôi nhận được một bộ sưu tập $ và thử điều này:
echo "collection ".$collection->name.": (id=".$collection->coll_id.") has ".count($collection->tags)."tags\n";
echo count($coll->games);//error here
và nhận được một lỗi
là gì sai trong quan hệ?
Trong ví dụ bạn đã cho tôi (tại yiiframework.com) họ sử dụng "Vai trò" mô hình. Có cần sử dụng mô hình collections_tags trong trường hợp của tôi không? Hoặc có một số cách giải quyết mà không có một lớp học mới? – lvil
Nó có thể không cần thiết, nhưng nếu có một cách, nó sẽ là khá khó khăn và bạn sẽ phải đào trong mã AR của khuôn khổ. Bạn có thể tìm "nguyên tắc" sau trong tài liệu: "Trước khi chúng tôi sử dụng AR để thực hiện truy vấn quan hệ, chúng ta cần cho AR biết làm thế nào một lớp AR có liên quan với một lớp khác". Vì vậy, AR làm việc với các mô hình. Đó là cách nó được. –