Как сделать заказ на загруженные отношения в Laravel 5.5? - PullRequest
0 голосов
/ 27 апреля 2018

Код ниже работает отлично и отображает все продукты со скидками в формате JSON для моего API.

public function promotions()
{
return $this->prepareResult(true, Product::has('discount')->where(['company_id'=> 1, 'is_active'=>1])->with('category')->with('discount')->get(), [],"All Promotions");
}

Но я хочу, чтобы результат был упорядочен по id в таблице скидок. Что-то вроде orderBy ("discount.id", "desc"). Может ли кто-нибудь предоставить решение для этого! Как можно использовать orderBy со столбцом 'id' в таблице 'discount' с помощью has ()?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Если вы хотите пойти по пути метода сбора вместо ответа Алекса (который также действителен), вы можете просто продолжить цепочку методов сбора после получения. Поскольку вы включили с (), вы можете сделать

->get()->sortBy('discount.id')

https://laravel.com/docs/5.6/collections#method-sortby

Не относится к вашему вопросу, но хотел бы отметить, что вы можете передать несколько аргументов с помощью (), чтобы не вызывать его дважды.

Product::has('discount')->where(['company_id'=> 1, 'is_active'=>1])->with('discount', 'category')->get()
0 голосов
/ 27 апреля 2018

Вы можете использовать функцию в своем выражении with:

public function promotions()
{
    return $this->prepareResult(true, Product::has('discount')
        ->where(['company_id'=> 1, 'is_active'=>1])
        ->with('category')
        ->with(['discount' => function ($query) {
            return $query->orderBy('id','DESC');
        }])->get(), [],"All Promotions");
}

Вы можете прочитать об этом здесь в документации.

...