数据排序问题,sortBy函数

时间:2019-06-25 10:42:28

标签: laravel sorting

对不起,也许是愚蠢的问题,但是我对排序结果有疑问,我只想按updated_at->数据的降序对结果进行排序,所以最新的记录排在最前

public function boostsRequest()
{
    $boosts = Cache::remember('boosts_all', 30, function () {
        $raw = Boost::where('status', 3)->where('hidden', false)->with('screenshot')->get();

        $raw->transform(function ($boost) {
            return [
                'currentdivision' => $boost->currentdivision,
                'desireddivision' => $boost->desireddivision,
                'wins' => $boost->wins,
                'type' => $boost->type,
                'screenshot' => optional($boost->screenshot)->url,
                'updated_at' => $boost->updated_at,
            ];
        });

        $raw = $raw->sortBy(function ($boost) {
            return strtotime($boost->updated_at->date);
        });            

        return $raw;
    });

    return $boosts;
}

通常,函数调用的结果是一个JSON表,其中填充了具有以下结构的对象:

{"currentdivision":"12","desireddivision":"16","wins":null,"type":"division","screenshot":"https:\/\/ucarecdn.com\/86c6d345-1a7f-4af4-8005-175ee235ccd8\/","updated_at":{"date":"2016-11-03 11:11:26.000000","timezone_type":3,"timezone":"UTC"}}

我想要一个按字段updated_at-> date排序的对象表,降序排列,因此最近更新的对象为第一个

2 个答案:

答案 0 :(得分:0)

updated_at值不是对象,只需删除->date部分,只需此代码。

return strtotime($boost->updated_at);

提示:有时,当我们怀疑值的表示方式或php函数在表记录上的行为时,可以使用tinker:D。

答案 1 :(得分:0)

只需在雄辩的请求中按更新时间对集合进行排序:

$raw = Boost::where('status', 3)->where('hidden', false)->with('screenshot')->orderBy('updated_at')->get();

updated_at值中,您确定它存在于数据库中。无需关闭。