我需要返回任务列表以及每个任务的当前用户进度。为此,我创建了以下雄辩的表达方式:
return DailyMission::with('userProgress')->get();
在DailyMission模型(daily_missions表)中使用以下关系:
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
如何输出当前用户的进度而不是随机用户?这个结构有什么问题吗?
答案 0 :(得分:0)
试试这个,
我不知道如何获取您的用户ID,但这应该有效:
$mission = DailyMission::with('userProgress')->where('id', 'theuserid')->first();
return $mission;
答案 1 :(得分:0)
@TheUnreal你可以尝试使用下面的代码。
return DailyMission::whereHas('userProgress', function($q) use ($user) {
$q->where('user_id', $user->id);
})->get();
答案 2 :(得分:0)
用于在Eloquent中获取具有特定条件的数据。 Laravel提供了使用closure/callback
函数的功能,该函数将与relationship
中定义的Model
绑定。所以在这里你可以简单地传递一个closure
,其条件如
return DailyMission::with([
'userProgress' => function($q) use ($user){
$q->where('user_id',$user->id);
}])->get();