Использование функций в макросах Laravel - PullRequest
0 голосов
/ 19 июня 2020

Я хотел бы расширить Eloquent Builder, чтобы он имел поддержку функции поиска. Внутри моего поставщика услуг я добавил следующее:

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

, который работает. Теперь я могу вызвать метод поиска на моей модели.

Проблема, с которой я столкнулся, заключается в том, что logi c внутри него становится довольно сложным, и я бы не хотел, чтобы он был одним большим скриптом, однако разделение на функции не работает, поскольку область видимости когда внутри обратный вызов macro фактически исходит от Eloquent Builder.

Значит, это не работает:

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

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

Есть ли способ использовать функции без лишних хлопот, связанных с расширением полного Eloquent Builder?

1 Ответ

0 голосов
/ 30 июля 2020

Я закончил тем, что создал класс, который будет содержать полные c логики, которые мне нужны. Я считаю это довольно хорошей практикой OOP.

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

    return $this;
});

Для всех, кто интересуется подробностями, вы можете проверить мой JSON пакет поиска .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...