具有多对一关系的多个表

several tables with many-to-one relationship

我正在使用 octobercms,它使用 eloquent 模型。

我有几个 table(BooksMoviesComics...),我需要 link 将它们 agegroup table。每本书(电影、漫画)都有一个年龄段。

我的初衷是这样的:

table agegroup:
  id
  ...

table book:
  id
  agegroup_id
  ...

table movie:
  id
  agegroup_id
  ...

但我不知道如何将其放入 Eloquent 模型中。

奖金问题:还有其他类似的 links(每本书、电影等都有一个部分),我需要与年龄组基本相同的字段 table:我应该重用那(如何?)或创建另一个类似的 table?

关系没有单一方向,它们是双向的,因此 一对多多对- 相同one,只是视角变了。这意味着从一个角度来看,一个模型有许多其他模型,而从另一个角度来看,一个模型属于另一个模型。甚至用于定义关系的命名也非常直观:hasManybelongsTo。下面介绍如何配置 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;
}

同样的逻辑适用于电影和任何其他可以有一个年龄段的实体。