如何通过Laravel 5.5中的热切关系订购?

时间:2018-04-27 14:03:16

标签: laravel eloquent relationship laravel-5.5

以下代码运行良好,并以我的API的JSON格式显示所有产品。

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'专栏'折扣'表使用has()?

2 个答案:

答案 0 :(得分:1)

您可以在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");
}

您可以在文档中了解此here

答案 1 :(得分:0)

如果你想去收集方法路线而不是Alex的答案(这也是有效的),你可以在get之后继续链接收集方法。由于你包含了with(),你可以做到

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

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

与您的问题无关,但想指出您可以将多个参数传递给with(),这样您就不会再调用它。

Product::has('discount')->where(['company_id'=> 1, 'is_active'=>1])->with('discount', 'category')->get()