2016-04-12 153 views
1

我正在使用Laravel 5.2。在我的應用程序中,如果用戶是管理員,他可以看到所有組。否則,他只能看到他的羣體。Laravel獲取關係或所有對象

型號

public function groups() { 
    if ($this->isAdmin()) { 
     return \App\Group::get(); 
    } 
    return $this->belongsToMany('App\Group'); 
} 

查看

@foreach($user->groups as $group) 
    {{ $group->name }} 
@endforeach 

結果

如果用戶是不是管理員上面的代碼工作,但如果我得到這個錯誤用戶是管理員

關係方法必須返回類型照亮\數據庫\雄辯\關係的對象\關係

我嘗試這樣做,而不是:$user->groups() as $group,當用戶是管理員它的工作原理,但什麼都不顯示時,它不是管理員。

問題

我知道當我打電話的關係作爲屬性($user->groups),它返回對象的集合。相反,如果我將它稱爲函數($user->groups()),我會得到一個QueryBuilder實例。

我能做些什麼來使用與我的觀點相同的語法?

注意:我無法將數據庫中的所有組添加到管理員,因爲管理員必須沒有組。

回答

1

這種方式不是直接使用這種關係,而是使用額外的方法來處理這個問題。

首先在你的模型創建簡單的關係:

public function groups() 
{ 
    return $this->belongsToMany('App\Group'); 
} 

,然後創建額外的方法:

public function availableGroups() 
{ 
    if ($this->isAdmin()) { 
     return \App\Group::get(); 
    } 
    return $this->groups; 
} 

現在,在視圖中可以使用:

@foreach($user->availableGroups() as $group) 
    {{ $group->name }} 
@endforeach 
+0

我已經使用額外的方法,但我寫了belongsToMany內聯來簡化代碼。我不知道有可能將關係作爲模型中的屬性。非常感謝! – Garric15