其中whereHas()访问另一边表列的Laravel where()

问题描述 投票:0回答:1

对不起,标题太乱了,我不知道该怎么形容。所以我得到了三个表tables in re model:学生,小组和与他们相关联的表称为“课程”。

[我正在尝试让没有分配小组或分配了大于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();
laravel eloquent where-clause relation with-statement
1个回答
1
投票

如果您不想通过数据透视表直接在学生和小组(属于多个)之间设置关系,则可以尝试以下操作:

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

[让学生选择的课程中有> 2010年的组,或者没有任何课程但未分配任何组。

© www.soinside.com 2019 - 2024. All rights reserved.