0

我想扩展 Eloquent Builder 以支持搜索功能。在我的服务提供商内部,我添加了以下内容:

Builder::macro('search', function (string $searchBy) {
    ...
}

哪个有效。我现在可以在我的模型上调用搜索方法。

我遇到的问题是其中的逻辑变得相当复杂,我不希望它是一个大脚本,但是拆分为函数不起作用,因为macro回调内部的范围实际上来自 Eloquent Builder .

所以这不起作用:

public function foo()
{
    dd('bar');
}

public function boot()
{
    Builder::macro('search', function (string $searchBy) {
        $this->bla();
        ...
    }
}

有没有一种方法可以使用函数而无需费心扩展完整的 Eloquent Builder?

4

1 回答 1

0

我最终创建了一个包含我需要的完整逻辑的类。我认为这是一个相当好的 OOP 实践。

Builder::macro('search', function (array $input) {
    $jsonQuery = new JsonQuery($this, $input);
    $jsonQuery->search();

    return $this;
});

对于任何对细节感兴趣的人,您可以查看我的 JSON 搜索包

于 2020-07-30T13:30:58.393 回答