数据库的当前状态
用户 ---- 编号 名称
用户课程 ---- 编号 user_id course_id
作业 ---- 编号 course_id 名称
详细信息:用户可以订阅多个课程,他们的订阅保存在UserCourse
表中。课程可以有多个家庭作业。
问题:有人想要访问用户订阅的所有课程中的所有家庭作业。
因此,一个用户有许多课程订阅,每个课程都有许多家庭作业。 因此,显而易见的解决方案是使用用户模型中的这段代码。
$this->hasManyThough('AppHomework', 'AppUserSubscribedToCourse', '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 中执行此操作?
访问用户订阅的所有课程中的所有家庭作业。
获取用户订阅的所有课程
$user_id = Auth::user()->id;
$courses = UserCourse::where('user_id', $user_id)->pluck('course_id');
从课程中获取所有作业
$homework = Homework::whereIn('course_id', $courses)->get();