Laravel where () внутри whereHas () обращается к столбцу другой боковой таблицы - PullRequest
0 голосов
/ 07 ноября 2019

Извините за грязное название, я не знал, как его описать. Итак, у меня есть три таблицы таблиц в модели re : студенты, группы и связанная с ними таблица, называемая курсами.

Я пытаюсь получить каждого «студента», которому не назначена группа или чтоназначил группу с годом, превышающим 2019, я получил этот код до сих пор, но я не могу получить доступ к столбцу года, я пытался с помощью метода "with ()", но мне не повезло, есть идеи? Мои модели на Laravel:

Студент:

public function courses()
{
    return $this->hasMany(\App\Models\Course::class, 'id_student');
}

Группа:

public function courses()
    {
        return $this->hasMany(\App\Models\Course::class, 'id_group');
    }

Курс:

public function student()
    {
        return $this->belongsTo(\App\Models\Student::class, 'id_student');
    }

public function group()
{
    return $this->belongsTo(\App\Models\Group::class, 'id_group');
}

Мой запрос:

$students_noassigned = Student::whereHas('courses', function ($query) {
            $query->where('year', '>', 2010);
        })
            ->doesntHave('courses', 'or')
            ->get();

1 Ответ

1 голос
/ 07 ноября 2019

Если вы не хотите устанавливать отношения непосредственно между учеником и группой (принадлежит многим) через сводку, вы можете попробовать это:

$students_noassigned = Student::whereHas('courses.group', function ($query) {
    $query->where('year', '>', 2010);
})->orDoesntHave('courses')->get();

Получить студентов, у которых есть курсы, в которых есть группа сгод> 2010 или нет курсов, группы не назначены.

...