2017-03-16 87 views
0

我需要返回任務列表以及每個任務的當前用戶進度。在我DailyMission模型(daily_missions表)Laravel:訪問關係表

return DailyMission::with('userProgress')->get(); 

使用以下關係:對於這一點,我創建了以下有力地表達

public function userProgress() { 
     return $this->hasOne(UserDailyMission::class,'mission_id'); 
    } 

的問題是,它不是指定的用戶,這意味着我得到隨機用戶在我的數據庫中的第一次進展。

我試圖改變表達成這樣:

return DailyMission::with('userProgress') 
     ->where('user_daily_missions.user_id',$user->id) 
     ->get(); 

,但我得到了以下錯誤:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_daily_missions.user_id' in 'where clause 

用戶進程使用下列結構存儲在user_daily_missions表:

id | user_id | mission_id | current_progress 

任何想法如何輸出當前用戶的進度而不是隨機用戶?這個結構有什麼問題嗎?

+1

使用'用([ 'userProgress'=>函數($ Q)使用($用戶){$ Q->在哪裏('USER_ID嘗試',$ user-> id);}])''而不是' - > where('user_daily_missions.user_id',$ user-> id)' –

+0

你有一個$ user在你的函數中嗎? – Onix

+0

@NarendrasinghSisodia謝謝!真棒! – TheUnreal

回答

0

用於在Eloquent內獲取特定條件的數據。 Laravel提供了使用closure/callback函數的功能,該功能將與您的Model中定義的relationship綁定。所以,在這裏,你可以簡單地傳遞一個closure有額外條件等作爲

return DailyMission::with([ 
    'userProgress' => function($q) use ($user){ 
     $q->where('user_id',$user->id); 
}])->get(); 
0

試試這個,

我不知道如何讓你的用戶ID,但是這應該工作:

$mission = DailyMission::with('userProgress')->where('id', 'theuserid')->first(); 

    return $mission; 
0

@TheUnreal請你用下面的代碼試試。

return DailyMission::whereHas('userProgress', function($q) use ($user) { 
    $q->where('user_id', $user->id); 
})->get();