【问题标题】:Laravel: Access relationship tableLaravel:访问关系表
【发布时间】:2017-03-16 22:02:10
【问题描述】:

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

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

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

【问题讨论】:

  • 尝试使用with(['userProgress' => function($q) use ($user){ $q->where('user_id',$user->id);}]) 而不是->where('user_daily_missions.user_id',$user->id)
  • 你的函数中有 $user 吗?
  • @NarendrasinghSisodia 谢谢!太棒了!

标签: laravel laravel-5 eloquent


【解决方案1】:

用于在 Eloquent 中获取具有特定条件的数据。 Laravel 提供了使用closure/callback 函数的功能,该函数将与您在Model 中定义的relationship 绑定。所以在这里你可以简单地传递一个带有额外条件的closure,比如 as

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

【讨论】:

    【解决方案2】:

    试试这个,

    我不知道如何获取您的用户 ID,但这应该可以:

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

    【讨论】:

      【解决方案3】:

      @TheUnreal 请您尝试使用以下代码。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        • 2014-05-15
        • 1970-01-01
        • 2020-07-03
        • 2017-02-17
        • 1970-01-01
        相关资源
        最近更新 更多