2015-07-10 42 views
3

比方說,我有一個UserGroup模型,它具有一對多關係。用戶可以屬於01組。組可以有很多用戶。Laravel訪問關係 - 檢查數據是否存在於模型中

當我顯示用戶列表時,我也想顯示他的組名 - 如果他屬於一個。所以我這樣做:

$user->group()->first()->name 

如果用戶不屬於一個組,這當然會引發錯誤。

所以我做這樣的事情:

!empty($user->group) ? $user->group()->first()->name : 'No group here' 

現在,在我的實際應用不僅僅有group。我從視圖中循環了更多的關係。像,角色,帳戶等

所以我真的不想混亂我的觀點。有沒有辦法從模型中檢查數據是否存在?

可能是這樣的嗎?

class User extends Model 
{ 
    // .. snip 

    public function group() 
    { 
     if (empty($this->group)) { 
      return 'Nothing here'; 
     } 

     return $this->hasOne(App\Group::class); 
    } 
} 

我該怎麼辦?這已經可用了嗎?我還沒有看到任何文檔或谷歌上可以幫助我(可能尋找谷歌搜索錯誤的話)?

所以,如果任何人都能指引我走向正確的方向,那會很棒。

+0

這就是你要找的東西:http://stackoverflow.com/a/23911985/784588而且,不,你不能定義這樣的關係,bc(渴望)加載的關係不起作用。另外,不要使用'$ user-> group() - > first()'但是'$ user-> group' –

+0

有一個方法FindOrFail(),檢查出 –

+0

所以我想,你在說什麼這幾乎是不可能的?那麼你怎麼做呢?我能想到的最好的是一個三元的表達。 '$ user-> group? $ user-> group-> name:'這裏沒有組'。 – clueless

回答

1

你可以在你User模型創建訪問方法,例如:

public function getGroupNameAttribute() 
{ 
    $this->group ? $this->group->name : 'Oops! Nothing.'; 
} 

所以,在視圖中,可以使用這樣的事情:

{{ $user->group_name }} 

輸出將是A組名或Oops! Nothing.