我有以下型号
$bar
(可以有一部或多部电影)Genres
(可以有一个或多个类型或制作公司Movies
(可以有很多电影)如果我应该使用ProductionCompanies
或has_many
,我就无法解决。
流派
many_many
影
<?php
class Genres extends DataObject {
private static $db = array(
"GenreId" => "Int",
"Name" => "Varchar"
);
private static $has_many = array(
"Movies" => "Movie"
);
}
ProductionCompanies
<?php
class Movies extends DataObject {
private static $db = array(
"Status" => "Varchar",
"Tagline" => "Varchar",
"Title" => "Varchar",
"Video" => "Varchar",
"VoteAverage" => "Decimal",
"VoteCount" => "Int"
);
private static $has_many = array(
"ProductionCompanies" => "ProductionCompany",
"Genres" => "Genre"
);
}
文档声明:
请在相关的子类上指定$ has_one-relationship,以便在两端都有必要的访问者。
但我的误解是,我的模特中没有一个“有一个”,它们都有很多
我想显示一个类型列表,其中包含与该类型相关联的电影列表
我还想要一份制作公司列表,其中包含与该公司相关的电影列表。
我还希望电影能够与一个或多个类型和/或制作公司联系。
感谢任何帮助!
答案 0 :(得分:6)
你需要一个多对多的地方:
<?php
class Genre extends DataObject {
private static $many_many = array(
'Movies' => 'Movie'
);
}
class Movie extends DataObject {
private static $belongs_many_many = array(
'Genres' => 'Genre',
'ProductionCompanies' => 'ProductionCompany'
);
}
class ProductionCompany extends DataObject {
private static $many_many = array(
'Movies' => 'Movie'
);
}
如果双方可以“拥有很多”,那么你需要多对多。 has-many仅在关系的一方只能与另一方的一个相关时才适用。
文档说明何时最好使用many_many或belongs_many_many:https://docs.silverstripe.org/en/3.4/developer_guides/model/relations/#many-many-or-belongs-many-many。我完全忽略了它们并做了相反的事情:D(因为电影属于到制作公司,而不是相反)。区别并不太重要,只要一方有多少就可以工作 - 无论哪个方面都在。