Laravel 5.4 hasManyThrough带有第二个本地密钥

时间:2018-05-14 00:40:56

标签: php laravel eloquent

数据库的当前状态

User
----
id 
name
UserCourse
----
id
user_id
course_id
Homework
----
id
course_id
name

详情:用户可以订阅多个课程,他们的订阅会保存在(defmacro until [test & body] `(while (not ~test) ~@body)) 表格中。课程可以有多个家庭作业。

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

因此,一个用户拥有多个课程订阅,每个课程都有很多家庭作业。 因此,显而易见的解决方案是使用用户模型中的此代码。

UserCourse

但这会生成以下查询

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

正如您所看到的,它错误地认为它应该与外键[{1}}匹配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

据我所知,源代码中只能指定User表的localKey。

这已在laravel 5.5中使用此拉取请求修复:https://github.com/laravel/framework/pull/19114

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

1 个答案:

答案 0 :(得分:1)

  

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

获取用户订阅的所有课程

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

从课程中获取所有作业

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