Laravel:动态获取查询中使用的订单?

时间:2019-06-13 10:35:10

标签: php laravel eloquent

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

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

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

到目前为止,一切正常,

但是,我还要返回使用的“订单”。有什么方法可以从paginateget集合中嗅出?订单清单?

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

例如,对于Paginator集合,我们可以返回:

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

BUT似乎无法获得查询中使用的顺序:

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

// trying to return something like this:

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

1 个答案:

答案 0 :(得分:1)

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

从最后开始删除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');