首页 > 解决方案 > Laravel:动态获取查询中使用的订单?

问题描述

我正在尝试创建一个通用success方法来解析我的查询并自动设置一些响应数据。

$items = Item::query()
   ->where('blah', $req->('blah_filter')
   ->orderBy('name', 'desc')
   ->paginate();

return success($items, 'yay, some results');

到目前为止,它工作正常,

但是,我也想返回使用的“订单”。paginate有没有办法从 a orget集合中嗅出它?订单清单?

编辑:按顺序,我的意思是来自orderBy不相关的模型。

例如,使用 Paginator 集合,我们可以返回:

return [
    'total' => $items->total(),
    'per_page' => $items->perPage(),
    'current_page' => $items->currentPage(),
    'items' => $items->items()
];

但似乎无法获得查询中使用的排序:

return [
    'order' => $items->someCallHere()
];

// trying to return something like this:

[
    'order' => [
        'by' => 'name',
        'direction' => 'desc'
    ]
]

标签: phplaraveleloquent

解决方案


您需要稍微更改您拥有的代码。

从最后删除,paginate()因为您首先要获得订单。之后添加它以检索items.

$items = Item::query()
   ->where('blah', $req->('blah_filter')
   ->orderBy('name', 'desc');

// in order to get the ordering used you can use:
$ordering = $items->getQuery()->orders;

// do something with $ordering

// this will be an array like this:
/**
array:1 [▼
  0 => array:2 [▼
    "column" => "created_at"
    "direction" => "desc"
  ]
]
*/

return success($items->paginate(), 'yay, some results');

推荐阅读