Как выполнить другое объединение в сводных таблицах, используя Laravel eloquent - PullRequest
0 голосов
/ 04 мая 2020

У меня есть 4 таблицы:

пользователи:

  • id
  • имя

курсы:

  • идентификатор
  • имя

параметры курса:

  • идентификатор
  • имя

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);
    }
}

Я хочу два списка:

  1. всех пользователей, которые отправили на выбранные ими курсы и варианты
  2. всех курсов пользователя и выбранной опции.

Другими словами, я хочу два запроса, подобные этим:

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? (Я нашел решение с запросами , но я хочу красноречивое решение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...