1

我正在使用 octobercms 它使用雄辩的模型。

我有几个表(Books, Movies, Comics...),我需要将它们链接到一个agegroup表。每本书(电影、漫画)都有一个年龄段。

我的第一个意图是这样的:

table agegroup:
  id
  ...

table book:
  id
  agegroup_id
  ...

table movie:
  id
  agegroup_id
  ...

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

额外的问题:还有其他类似的链接(每本书,电影等都有一个部分),我需要与年龄组表中基本相同的字段:我应该重用它(如何?)还是创建另一个类似的表?

4

1 回答 1

1

关系没有单一的方向,它们是双向的,所以一对多与多对一相同,只是视角发生了变化。这意味着从一个角度来看,一个模型有许多其他模型,而从另一个角度来看,一个模型属于另一个模型。甚至用于定义关系的命名也非常直观: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;
}

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

于 2015-11-25T17:54:54.290 回答