Laravel宏集合-对null调用成员函数map()

rslzwgfq  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个项目,我想用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版本中我也不知道。

vuktfyat

vuktfyat1#

您是否可以按照以下步骤更新marcro?“只是为了确保导入了Collection

\Illuminate\Support\Collection::macro('recursive', function () {
    return $this->map(function ($value) {
        if (is_array($value) || is_object($value)) {
            return collect($value)->recursive();
        }

        return $value;
    });
});

相关问题