我有一个项目,我想用meilisearch给它添加一个过滤器功能,我正在尝试创建一个新的宏集合。
// App\Providers\AppServiceProvider.php
public function boot(): void
{
Collection::macro('recursive', function () {
$this->map(function ($value) {
if (is_null($value)) return;
if (is_array($value) || is_object($value)) {
return collect($value)->recursive();
}
return $value;
});
});
}
当我试图调用宏来过滤时,
// dd($this->queryFilters)
/*
array:2 [▼ // app\Http\Livewire\ProductBrowser.php:26
"color" => []
"size" => []
]
*/
$filters = collect($this->queryFilters)
->filter(fn ($filter) => !empty($filter))
->recursive()
->map(function ($value, $key) {
return $value->map(fn ($value) => $key . ' = "' . $value . '"');
})
->flatten()
->join('AND');
dd($filters);
它给了我Error:Call to a member function map() on null
,似乎是“递归()”函数返回null。
我尝试将递归宏添加到集合中。
我认为问题出在“recursive()”上,也许在meilisearch版本中我也不知道。
1条答案
按热度按时间vuktfyat1#
您是否可以按照以下步骤更新
marcro
?“只是为了确保导入了Collection