我有courses
和student_courses
表。如果学生完成了一门课程,我将在student_courses
表中插入一行student_id
和course_id
。现在,我有一个场景,如果学生完成了一定数量的课程,则需要从student_ids
表中获取所有student_courses
。我从另一个查询中获得了course_ids
作为数组。有没有办法在laravel中有效地进行此查询,因为student_courses
表中已经有10万多个数据?
答案 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