我有以下型号
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"
);
}
Run Code Online (Sandbox Code Playgroud)
电影
<?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"
);
}
Run Code Online (Sandbox Code Playgroud)
ProductionCompanies
<?php
class ProductionCompanies extends DataObject {
private static $db = array(
"CompanyId" => "Int",
"Description" => "Text",
"Headquarters" => "Varchar",
"Homepage" => "Varchar",
"LogoPath" => "Varchar",
"Name" => "Varchar",
);
private static $has_many = array(
"Movies" => "Movie"
);
}
Run Code Online (Sandbox Code Playgroud)
文档说明:
请在相关的子类上指定$ has_one-relationship,以便在两端都有必要的访问器.
但我在这里的误解是,我的模特中没有一个"有一个",它们都有很多
我想显示一个类型列表,其中包含与该类型相关联的电影列表
我还想要一份制作公司列表,其中包含与该公司相关的电影列表.
我还希望电影能够与一个或多个类型和/或制作公司联系.
任何帮助表示赞赏!
小智 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'
);
}
Run Code Online (Sandbox Code Playgroud)
如果双方可以"拥有很多"彼此,那么你将需要多对多.有一对多仅适用如果关系的一面永远只能与一个对方.
该文档解释时最好使用many_many或belongs_many_many:https://docs.silverstripe.org/en/3.4/developer_guides/model/relations/#many-many-or-belongs-many-many.我完全忽略了它们并做了相反的事情:D(因为电影属于制作公司,而不是相反).这种区别并不太重要,只要一方有多方面就可以运作 - 无论它在哪一侧.
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |