Laravel whereHas() 中的 where() 访问另一侧 table 列
Laravel where() inside a whereHas() access other side table column
抱歉标题乱七八糟,我不知道如何描述它。
所以我得到了三个 tables tables in re model:学生、小组,以及与他们相关的 table,称为课程。
我试图获取每个 "student" 没有分配组或分配了一个大于 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();
如果您不想通过枢轴在学生和组(属于许多)之间直接设置关系,您可以试试这个:
$students_noassigned = Student::whereHas('courses.group', function ($query) {
$query->where('year', '>', 2010);
})->orDoesntHave('courses')->get();
让学生的课程中有组年 > 2010 或没有任何课程,没有分配组。
抱歉标题乱七八糟,我不知道如何描述它。 所以我得到了三个 tables tables in re model:学生、小组,以及与他们相关的 table,称为课程。
我试图获取每个 "student" 没有分配组或分配了一个大于 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();
如果您不想通过枢轴在学生和组(属于许多)之间直接设置关系,您可以试试这个:
$students_noassigned = Student::whereHas('courses.group', function ($query) {
$query->where('year', '>', 2010);
})->orDoesntHave('courses')->get();
让学生的课程中有组年 > 2010 或没有任何课程,没有分配组。