У меня есть 4 таблицы:
пользователи:
курсы:
параметры курса:
user_courses:
- user_id
- course_id
- option_id
Каждый пользователь может иметь несколько курсов с опцией.
There мои модели:
Пользователь:
class User extends Authenticatable
{
public function courses()
{
$courses = $this->belongsToMany (Course::class, 'user_courses')
->as('user_courses')->withPivot('option')->withTimestamps();
return $courses;
}
}
Курс:
class Course extends Model
{
public function users ()
{
return $this->belongsToMany(User::class, 'user_courses')
->as('user_courses')->withPivot('option')->withTimestamps();
}
public function options ()
{
return $this->hasMany(CourseOption::class);
}
}
Вариант курса:
class CourseOption extends Model
{
public function course ()
{
return $this->belongsTo(Course::class);
}
}
Я хочу два списка:
- всех пользователей, которые отправили на выбранные ими курсы и варианты
- всех курсов пользователя и выбранной опции.
Другими словами, я хочу два запроса, подобные этим:
SELECT courses.name, course_options.name, users.name FROM courses
INNER JOIN user_courses ON courses.id = user_courses.course_id
INNER JOIN users ON user_courses.user_id = users.id
INNER JOIN course_options ON user_courses.option_id = course_options.id
SELECT courses.name, course_options.name FROM courses
INNER JOIN user_courses ON courses.id = user_courses.course_id
INNER JOIN users ON user_courses.user_id = users.id
INNER JOIN course_options ON user_courses.option_id = course_options.id
WHERE users.id = 1
Могу ли я получить их с помощью eloquent? (Я нашел решение с запросами , но я хочу красноречивое решение).