几个表与多对一的关系

时间:2015-11-25 16:57:52

标签: laravel octobercms

我使用的是使用雄辩模型的octobercms。

我有几个表(BooksMoviesComics ...),我需要将它们链接到agegroup表。每本书(电影,漫画)都只有一个年龄组。

我的第一个意图是:

table agegroup:
  id
  ...

table book:
  id
  agegroup_id
  ...

table movie:
  id
  agegroup_id
  ...

但是我不知道怎么把它变成一个Eloquent模型。

奖金问题:还有其他类似的链接(每本书,电影等只有一个部分)我需要基本上与agegroup表相同的字段:我应该重用它(如何?)或创建另一个类似的表?

1 个答案:

答案 0 :(得分: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;
}

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