过滤laravel结果集(集合)失败

时间:2015-10-21 17:15:48

标签: php laravel laravel-4

过滤集合中,laravel给出了此示例:

$users = $users->filter(function ($user) {
    if ($user->isAdmin()) {
        return $user;
    }
});

使用这个例子我构建了一个过滤器:

$links = DB::table('links')->orderBy('created_at', 'desc')->remember(60)->take(1000)->get();

$imageLinks = $links->filter(function ($link) {
    if (! empty($link->image_src)) {
        return $link->toArray();
    }
});

但是,这会引发以下错误:

  

PHP致命错误:在非对象上调用成员函数filter()

我能错过什么?

1 个答案:

答案 0 :(得分:3)

更新:自Laravel 5.3起,查询构建器将其结果作为集合返回。无需手动包装。

目前,只有Eloquent会返回一个集合。目前,常规数据库结果必须自己包装在一个集合中:

$links = DB::table('links')->latest()->take(1000)->get();

$imageLinks = collect($links)->filter($callback);
顺便说一句,你回来的并不重要。如果它真实,原始项目在返回的过滤集合中。

The docs实际上会返回true

$collection = collect([1, 2, 3, 4]);

$filtered = $collection->filter(function ($item) {
    return $item > 2;
});

$filtered->all();

// [3, 4]