Заменить обратный вызов Laravel на функцию - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий базовый запрос, который я использую для извлечения коллекций с их отношениями, областями действия, сортировкой, фильтрацией, ... Этот базовый запрос используется почти во всех моих моделях путем расширения класса, в котором находится этот базовый запрос.

        return $this->runSortQuery(
            $query->when($request->has('filter'),
                function($query) use ($request) {
                    return $query->search($request->filter);
                }
            )->when($request->has('with'), 
                function($query) use ($request) {
                    return $query->with(
                        explode(',', $request->with)
                    );
                }
            )->when($request->has('scopes'),
                function($query) use ($request) {
                    return $query->scopes(
                        json_decode($request->scopes, true)
                    );
                }
            ) /* and so on... */, $request
        )->paginate((isset($request->paginate)) ? $request->paginate : 15);

Возможно ли заменить обратный вызов в каждом when вызовом пользовательской функции?Причина, по которой я этого хочу, заключается в том, что эта базовая функция становится действительно длинной, и я хотел бы, чтобы метод в обратном вызове был в ее собственной функции, для удобства чтения и для обеспечения удобства обслуживания.

Я пробовал это, но это, очевидно, делаетне работа.

$query->when($request->has('filter'), $this->filter($query, $request->filter))
      ->when($request/* and so on... */);

Можно ли это сделать по-другому или каков будет хороший шаблон или метод для этого?

1 Ответ

0 голосов
/ 11 октября 2018

Да, вы можете использовать callables , например, так:

$query->when($request->has('filter'), [$this, 'someMethodNameInClass'])
    ->...

Проверьте это SO thread , чтобы узнать больше

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