【问题标题】:Using functions in Laravel macros在 Laravel 宏中使用函数
【发布时间】:2020-06-19 09:04:01
【问题描述】:

我想扩展 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?

【问题讨论】:

  • 也许你想使用全局范围:laravel.com/docs/master/eloquent#global-scopes
  • 我不 :) 我想使用宏
  • 匿名函数是如何工作的,你的例子应该可以工作吗?它共享定义的范围?
  • 我不太明白你在说什么,你能改一下吗?

标签: php laravel eloquent laravel-7 laravel-7.x


【解决方案1】:

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

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

    return $this;
});

有兴趣了解详情的可以关注my JSON search package

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多