【问题标题】:Laravel where() inside a whereHas() access other side table columnLaravel where() 在 whereHas() 中访问其他边表列
【发布时间】:2019-11-07 07:16:24
【问题描述】:

抱歉标题凌乱,我不知道如何描述它。 所以我得到了三个表tables in re model:学生、组以及与它们相关的表,称为课程。

我试图让每个“学生”没有分配小组或分配了一个年份大于 2019 年的小组,到目前为止我得到了这个代码,但我无法访问年份列,我尝试使用“与()" 方法,但我没有运气,有什么想法吗? 我在 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】:

    如果您不想通过枢轴直接在学生和组(属于多个)之间设置关系,您可以尝试以下操作:

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

    获取有课程的学生,该课程的小组年份 > 2010 或没有任何课程,没有分配小组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2021-07-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      相关资源
      最近更新 更多