在过滤集合中,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()
我能错过什么?
答案 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]