如何区分查询构建器实例和同一实例的数组

时间:2016-10-18 04:03:42

标签: php laravel

如何获取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不是数组”

2 个答案:

答案 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()函数转换为数组。

https://laravel.com/docs/5.3/eloquent#collections