获取模型的所有关系:混合hasMany和belongsToMany

时间:2017-08-28 15:26:04

标签: php laravel laravel-5 eloquent laravel-5.4

这是关于“图书馆”和“用户”,但它可以被视为更通用的案例。

  • 我有一个与Library表关联的libraries模型。
  • libraries表格有一个creator_id,它是对users表格的引用。
  • 还可以为所有查看图书馆的用户提供数据透视表library_user

所以我可以通过在User模型中创建一个方法,通过数据透视表获取与用户关联的所有库:

public function librariesAssociatedViaPivot()
{
    return $this->belongsToMany(Library::class);
}

我还可以创建一个函数来获取由User创建的库:

public function librariesCreatedByUser()
{
    return $this->hasMany(Library::class);
}

但我想要的是User 创建的库 + User 可以看到的库。换句话说,我想混合这两个函数,并能够通过调用User来查看$users->libraries 的所有库。

public function libraries()
{
    // ... ?
}

我应该在这个库方法中加入什么?

Sub

旁注:我不想在数据透视表中添加创建者。

1 个答案:

答案 0 :(得分:0)

所以$user->librariesAssociatedViaPivot$user->librariesCreatedByUser都返回CollectionLibrary个?你想两者结合? 在这种情况下,只需这样做:

public function libraries()
{
    return $this->librariesAssociatedViaPivot->merge($this->librariesCreatedByUser);
}

并使用$user->libraries()