Laravel:访问关系表

时间:2017-03-16 13:14:54

标签: laravel laravel-5 eloquent

我需要返回任务列表以及每个任务的当前用户进度。为此,我创建了以下雄辩的表达方式:

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

如何输出当前用户的进度而不是随机用户?这个结构有什么问题吗?

3 个答案:

答案 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();