如何获取Model表的查询构建器实例与同一模型的对象数组之间的差异?
foreach ($completed_course_id as $value)
{
array_push($completed_courses,DB::table('courses')->where('id', $value)->first());
}
$courses = Course::all();
$result = array_diff($courses, $completed_courses);
将结果作为紧凑返回“array_diff():参数#1不是数组”
答案 0 :(得分:2)
Course::all()
会返回一个Illuminate\Database\Eloquent\Collection
对象,为您提供vast amount of helper methods迭代数组。
因此,您需要首先通过调用array_diff($courses, $completed_courses);
将$courses
转换为数组,而不是$courses->toArray()
:
$result = array_diff($courses->toArray(), $completed_courses);
在旁注中,由于您在一系列对象上执行array_diff
,因此上面的代码试图实现的内容可能不会起作用!循环$completed_course_id
并逐个查询它也是低效的。我假设你的目标是检索所有不完整的课程。为此,您只需使用它来替换上面的所有代码:
$result = DB::table('courses')
->whereNotIn('id', $completed_course_id)->get();
答案 1 :(得分:0)
如果使用all()
和get()
,则会返回Illuminate\Database\Eloquent\Collection
的实例。所以我们需要使用toArray()
函数转换为数组。