数据库的当前状态
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中执行此操作?
答案 0 :(得分:1)
从用户订阅的所有课程中访问所有作业。
获取用户订阅的所有课程
$user_id = Auth::user()->id;
$courses = UserCourse::where('user_id', $user_id)->pluck('course_id');
从课程中获取所有作业
$homework = Homework::whereIn('course_id', $courses)->get();