Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择相关模型符合条件的模型_Php_Laravel_Laravel 5 - Fatal编程技术网

Php 选择相关模型符合条件的模型

Php 选择相关模型符合条件的模型,php,laravel,laravel-5,Php,Laravel,Laravel 5,我有一个班级学生和班级考试。一个学生可以有许多考试,一个考试可以属于一个学生。我需要选择所有参加“英语”考试的学生,因此我尝试执行以下操作: $english_students = Student::with('Exams')-whereHas('Exams', function($query){ //logic to return true if the student has a related Exam with name of "English"; }) 我的问题是我没有完全理

我有一个班级
学生
和班级
考试
。一个学生可以有许多考试,一个考试可以属于一个学生。我需要选择所有参加“英语”考试的学生,因此我尝试执行以下操作:

$english_students = Student::with('Exams')-whereHas('Exams', function($query){
    //logic to return true if the student has a related Exam with name of "English";
})

我的问题是我没有完全理解在闭包中我能做什么或不能做什么。

只需在回调函数中添加where子句:

$english_students = Student::with('Exams')-whereHas('Exams', function($query){
     $query->where("name","English");
})->get();
$english_students = Student::with('Exams')->whereHas('Exams', function($query){

    $query->where('name', 'English');

})->get();
如果您不需要参加考试,请使用以下方法:


另外,如果您不需要加载所有学生的考试,请删除
with()
部分。

如果他也想参加考试怎么办?@YouneL则他不应该删除
with()
部分。但是OP的任务听起来好像不需要为每个学生加载所有的考试。然后使用
has
就足够了:
student::has('tests','=','English')->get()
$english_students = Student::has('exams', '=', 'English')->get(); 
Student::whereHas('Exams', function($q) use($examName) {
    $q->where('name', $examName);
})
->get();