2014-09-23 35 views
0

我有以下關係:雄辯與條款嵌套在中間關係

  • 用戶[多到多用]分配
  • 分配[多到多用]徽章
  • 的assignment_user透視表有一個標誌「is_finished」我需要是真實的

這些都是我在匹配模式的關係:

user.php的

public function assignments() 
{ 
return $this->belongsToMany('Assignment')->withPivot('is_finished')->withTimestamps(); 
} 

Assignment.php

public function badges() 
{ 
return $this->belongsToMany('Badge', 'badge_assignment')->withTimestamps(); 
} 

Badge.php

public function assignments() 
{ 
return $this->belongsToMany('Assignment', 'badge_assignment')->withTimestamps(); 
} 

我試圖讓所有的徽章我的用戶完成分配。這是我的查詢:

$user = User::with(array(
'assignments' => function($query) { 
$query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
}) 
) 
->with('badges') 
->username($name)->first(); 

然而,這是渲染錯誤「調用未定義的方法照亮\數據庫\查詢\生成器::徽章()」當我使用的foreach($用戶> assignments->徽章。 ..)。

然後我試圖讓第一與範圍內的徽章,但我不知道如何到達is_finished:

$user = User::with(array(
'assignments.badges' => function($query) { 
$query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
}) 
) 
->username($name)->first(); 

有了這個,我得到「未找到列」,這是因爲查詢在徽章內尋找is_finished,而不是assign_user關係。

當我有這個問題我想這只是可以肯定的:

User::with('assignments.badges')->whereUsername($username); 

...,我仍然得到「未定義的屬性:照亮\數據庫\雄辯\收藏:: $徽章」 。

我在做什麼錯?

回答

0

你需要加載嵌套assignments.badges這樣的:使用您的代碼

$user = User::with(array(
    'assignments' => function($query) { 
     $query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
    }) 
) 
    ->with('assignments.badges') 
    ->username($name) // do you have a scope for this or should it be whereUsername? 
    ->first(); 
+0

呈現相同的錯誤我的第三個(簡單)的嘗試:「未定義的屬性:照亮\數據庫\雄辯\收藏:: $徽章」 。 僅供參考,我從查詢中獲取結果後,在我的視圖中使用$ user-> assignments->徽章。 – Anonymous 2014-09-23 11:42:33

+0

我不這麼認爲。你可能試圖調用這樣的東西:'$ user-> assignments-> badges',它顯然會拋出這個錯誤。對於渴望加載本身,我的代碼是要走的路,相信我。那麼,是的,你當然不能這樣做 - 你想在模型的集合中獲取'模型'關係 - 例如你需要一個foreach循環。 – 2014-09-23 11:44:48

+0

傻了,當然你是對的。我是愚蠢的,試圖獲取徽章,而不需要爲每個任務運行第二個循環。非常感謝快速解決方案! – Anonymous 2014-09-23 11:47:53