我创建了一个名为material
的扩展,一切正常。我想实现简单的搜索查询,所以我从扩展bixie/portfolio
采样了它,您可以从marketplace
获取它。所以我的MaterialController
中有这段代码:
$user_id = App::user()->id;
$query = array_values(Material::query()->where('user_id = ?', [$user_id])->get());
$filter = array_merge(array_fill_keys(['search', 'order', 'limit'], ''), $filter);
extract($filter, EXTR_SKIP);
if ($search) {
$query->where(function ($query) use ($search) { //<-- this throw error.
$query->orWhere(['name LIKE :search'], ['search' => "%{$search}%"]);
});
}
我会得到致命的错误:
致命错误:调用成员函数,其中((在行数组上...
错误是什么意思?
我用谷歌搜索了一些评论,认为函数在哪里((需要与集合一起使用。在这种情况下,我该如何解决?
我正在使用pagekit 1.0.12
,symfony ~3.0.0
。
正确的代码版本是:
$user_id = App::user()->id;
// init query and add filter by `user_id`
// DO NOT use `get` and `array_values`, because
// these functions __change__ type of `$query`
$query = Material::query()->where('user_id = ?', [$user_id]);
$filter = array_merge(array_fill_keys(['search', 'order', 'limit'], ''), $filter);
extract($filter, EXTR_SKIP);
if ($search) {
// add additional filtering
$query->where(function ($query) use ($search) {
$query->orWhere(['name LIKE :search'], ['search' => "%{$search}%"]);
});
}
// get/return results of a query
return $query->get();