Текущее состояние базы данных
User
----
id
name
UserCourse
----
id
user_id
course_id
Homework
----
id
course_id
name
Подробности: Пользователи могут подписаться на несколько курсов, и их подписка сохраняется в таблице 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
.
.как я вижу из исходного кода, только localKey для таблицы User может быть указан.
Это было исправлено в laravel 5.5 с помощью этого запроса на извлечение: https://github.com/laravel/framework/pull/19114
Есть ли способвыполнить это в Laravel 5.4?