Laravel красноречиво, сортировка где есть / ширина данных - PullRequest
1 голос
/ 06 января 2020

Здесь мой код:

list($orderBy, $orderDirection) = explode('.', request()->get('sort_by'));

        $prestations = Prestation::with([
            'service' => function($query) { 
                $query->select(['id','name']);
            },
            'facility' => function($query) { 
                $query->select(['id','name']);
            },
            'conciergeries.network' => function($query) { 
                $query->select(['id','name']);
            }
        ])
            ->whereHas('service', function ($query) use ($searchService) {
                $query->where('name', 'regexp', "/$searchService/i");
            })  
            ->whereHas('facility', function ($query) use ($searchPartenaire) {
                $query->where('name', 'regexp', "/$searchPartenaire/i");
            })
            ->whereHas('conciergeries.network', function ($query) use ($searchFiliale) {
                $query->where('name', 'regexp', "/$searchFiliale/i");
            })
                ->where('name', 'regexp', "/$search/i")
                ->orderBy($orderBy, $orderDirection)
                ->paginate(50);

Мне нужно, чтобы заказы по service.name или facility.name или conciergeries.network.name, $orderBy и $orderDirection исходили из вида:

$orderBy может иметь следующие значения: «имя», «услуга», «средство», «filiale».

$orderDirection может иметь следующие значения: «как c» или « des c '.

Я пытался добавить orderBy в запросе with или whereHas, но ничего не работает правильно. Большое спасибо.

1 Ответ

2 голосов
/ 06 января 2020

просто добавьте

'service' => function($query) use($orderBy, $orderDirection) { 
            $query->select(['id','name']);
            $query->orderBy($orderBy, $orderDirection)
        },

В с заявлениями

...