2017-03-16 79 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();