2017-08-28 52 views
0

它是關於「庫」和「用戶」的,但它可以被看作是更通用的情況。獲取模型的所有關係:混合hasMany和belongsToMany

  • 我有一個Library模型與libraries表關聯。
  • libraries表有creator_id這是對users表的參考。
  • 還有一個數據透視表library_user爲所有的用戶誰可以一個庫。

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

    我還可以創建一個函數來獲取通過創建庫:

這樣我就可以通過創建一個方法User模型這樣獲得通過樞軸表關聯到用戶的所有庫User

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

,但我要的是User創造庫+天秤座ries User可以看到。換句話說,我想混的兩種功能,並能夠通過調用看到了User所有庫:

$users->libraries 

我應該把這個庫的方法?

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

備註:我不想在數據透視表中添加創建者。

回答

0

所以和$user->librariesCreatedByUser都返回CollectionLibrary s?你想結合兩者嗎? 在這種情況下,只要做到這一點:

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

,並使用$user->libraries()

+0

好的謝謝。儘管如此,我不能使用'$ users-> libraries',並且不能使用查詢生成器的流暢API(類似於'$ users-> libraries() - > orderBy('id')') –

+0

如果你想用它作爲'$ user-> libraries',你可以命名函數'getLibrariesAttribute()'。見[這裏](https://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor)。 您可以使用所有'Collection'方法,參見[這裏](https://laravel.com/docs/5.4/collections#available-methods)。 – Aegir

+0

這是因爲它正在返回一個集合。使用收集方法,而不是像['sortBy'](https://laravel.com/docs/5.4/eloquent-collections#available-methods)。 –