【发布时间】: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 中执行此操作?
【问题讨论】: