【问题标题】:Laravel 5.4 hasManyThrough with a second local keyLaravel 5.4 hasManyThrough 和第二个本地密钥
【发布时间】:2018-10-23 14:44:54
【问题描述】:

数据库的当前状态

用户 ---- ID 姓名 用户课程 ---- ID 用户身份 course_id 在家工作 ---- ID course_id 姓名

详情:用户可以订阅多个课程,他们的订阅保存在UserCourse 表中。课程可以有多个作业。

问题:有人想要访问用户订阅的所有课程的所有作业。

所以一个用户订阅了很多课程,每门课程都有很多作业。 所以显而易见的解决方案是使用来自用户模型的这段代码。

$this->hasManyThough('App\Homework', 'App\UserSubscribedToCourse', 'user_id', 'course_id'),

但这会生成以下查询

select homeworks.*, user_course.user_id from homeworks inner join user_course on user_course.id = homeworks.course_id where user_course.user_id = 51

如您所见,它错误地认为应该将user_course.id 与外键homeworks.course_id 匹配,但正确的localKey 应该是user_course.course_id

从源码看,只能指定User表的localKey。

这已在 laravel 5.5 中通过以下拉取请求修复:https://github.com/laravel/framework/pull/19114

有没有办法在 laravel 5.4 中执行此操作?

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    访问用户订阅的所有课程的所有作业。

    获取用户订阅的所有课程

    $user_id = Auth::user()->id;
    $courses = UserCourse::where('user_id', $user_id)->pluck('course_id');
    

    从课程中获取所有作业

    $homework = Homework::whereIn('course_id', $courses)->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      相关资源
      最近更新 更多