具有多对一关系的多个表
several tables with many-to-one relationship
我正在使用 octobercms,它使用 eloquent 模型。
我有几个 table(Books
、Movies
、Comics
...),我需要 link 将它们 agegroup
table。每本书(电影、漫画)都有一个年龄段。
我的初衷是这样的:
table agegroup:
id
...
table book:
id
agegroup_id
...
table movie:
id
agegroup_id
...
但我不知道如何将其放入 Eloquent 模型中。
奖金问题:还有其他类似的 links(每本书、电影等都有一个部分),我需要与年龄组基本相同的字段 table:我应该重用那(如何?)或创建另一个类似的 table?
关系没有单一方向,它们是双向的,因此 一对多 与 多对- 相同one,只是视角变了。这意味着从一个角度来看,一个模型有许多其他模型,而从另一个角度来看,一个模型属于另一个模型。甚至用于定义关系的命名也非常直观: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;
}
同样的逻辑适用于电影和任何其他可以有一个年龄段的实体。
我正在使用 octobercms,它使用 eloquent 模型。
我有几个 table(Books
、Movies
、Comics
...),我需要 link 将它们 agegroup
table。每本书(电影、漫画)都有一个年龄段。
我的初衷是这样的:
table agegroup:
id
...
table book:
id
agegroup_id
...
table movie:
id
agegroup_id
...
但我不知道如何将其放入 Eloquent 模型中。
奖金问题:还有其他类似的 links(每本书、电影等都有一个部分),我需要与年龄组基本相同的字段 table:我应该重用那(如何?)或创建另一个类似的 table?
关系没有单一方向,它们是双向的,因此 一对多 与 多对- 相同one,只是视角变了。这意味着从一个角度来看,一个模型有许多其他模型,而从另一个角度来看,一个模型属于另一个模型。甚至用于定义关系的命名也非常直观: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;
}
同样的逻辑适用于电影和任何其他可以有一个年龄段的实体。