我使用的是使用雄辩模型的octobercms。
我有几个表(Books
,Movies
,Comics
...),我需要将它们链接到agegroup
表。每本书(电影,漫画)都只有一个年龄组。
我的第一个意图是:
table agegroup:
id
...
table book:
id
agegroup_id
...
table movie:
id
agegroup_id
...
但是我不知道怎么把它变成一个Eloquent模型。
奖金问题:还有其他类似的链接(每本书,电影等只有一个部分)我需要基本上与agegroup表相同的字段:我应该重用它(如何?)或创建另一个类似的表?
答案 0 :(得分:1)
关系没有单向,他们是双向的,所以一对多与多对一<强>,只有视角发生变化。这意味着从一个角度来看,模型有许多其他模型,而另一个模型则属于另一个模型。甚至用于定义关系的命名也非常直观:hasMany
和belongsTo
。以下是配置Book
模型与AgeGroup
模型之间关系的方法。
一本书只属于一个年龄组:
class Book extends Model
{
public $belongsTo = [
'ageGroup' => 'Acme\Blog\Models\AgeGroup'
];
}
然后你可以得到这样一本书的年龄组:
Book::find(1)->ageGroup->name; // I'm assuming age groups have names
这种关系的逆转是一个年龄组可以有很多与之相关的书籍:
class AgeGroup extends Model
{
public $hasMany = [
'books' => 'Acme\Blog\Models\Book'
];
}
然后你可以得到属于一个年龄组的所有书籍:
foreach (AgeGroup::find(1)->books as $book) {
// access book details like: $book->title;
}
同样的逻辑适用于电影和任何其他可以拥有一个年龄组的实体。