检查数组的所有元素是否在laravel中的表中

时间:2019-02-07 03:02:51

标签: mysql laravel

我有coursesstudent_courses表。如果学生完成了一门课程,我将在student_courses表中插入一行student_idcourse_id。现在,我有一个场景,如果学生完成了一定数量的课程,则需要从student_ids表中获取所有student_courses。我从另一个查询中获得了course_ids作为数组。有没有办法在laravel中有效地进行此查询,因为student_courses表中已经有10万多个数据?

1 个答案:

答案 0 :(得分:2)

不知道使用查询,但是您可以使用array_intersect()函数来做到这一点。

// get all courses id you want to check into one array
$checkCourses = [1,2,...];

// get all courses completed by student
$completedCourses = StudentCourse::where('student_id', $studentId)->pluck('course_id');

现在您可以使用array_intersect()

$result = array_intersect($completedCourses, $checkCourses);
if(!empty($result)) {
    // your code...
}

以下查询将提供完成课程ID(1、3、4)的学生

DB::query("SELECT student_id FROM student_courses WHERE course_id IN (1,3,4) GROUP BY student_id HAVING COUNT(*) = 3");

其中count 3是您要检查的总课程的大小,在上面的查询中,我们正在检查课程ID 1,3,4,因此HAVING COUNT(*)为3