Laravel 5.4 具有第二个本地密钥的 ManyThrough



数据库的当前状态

用户 ---- 编号 名称
用户课程 ---- 编号 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();

相关内容

  • 没有找到相关文章

最新更新