【问题标题】:sortBy('time') gives error: time() expects exactly 0 parameters, 2 given in Laravel 8sortBy('time') 给出错误:time() 需要 0 个参数,2 在 Laravel 8 中给出
【发布时间】:2020-12-08 13:09:45
【问题描述】:

我有一系列度量

$m = new Measure([
                    'time' => $measure['timestamp'],
                    'operation_id' => $measure['op_id'],
                    'meter_id' => $prm,
                    'conso_prod' => $measure['conso_prod'],
                    'delta' => $measure['delta'],
                    'redistributed' => $measure['redistribute'],
                ]

Measure 表是一个 postgres 超表(timescaleDB 扩展)

time 是没有时区的时间戳

当我想对其进行排序时,我可以这样做:

$myCollection->sortBy(['operation_id', 'meter_id', 'conso_prod']);

但我也想按时间戳升序排序。

现在,如果我这样做:

$myCollection->sortBy(['operation_id', 'meter_id', 'conso_prod', 'time']);

我收到一个错误:

time() expects exactly 0 parameters, 2 given

为什么会这样?

【问题讨论】:

    标签: laravel collections


    【解决方案1】:

    正如你所说,数组的 time 键已经是时间戳,所以我基本上已经将它解析为 Carbon 实例。

    $myCollection->sortBy(function ($obj, $key) {
        return Carbon::parse($obj['time']);
    });
    

    尝试像这样与数组分开使用,

    $myCollection->sortBy(['operation_id', 'meter_id', 'conso_prod'])->sortBy(function ($obj, $key) {
        return Carbon::parse($obj['time']);
    });
    

    【讨论】:

    • 嗯,时间是 Postgres 中的时间戳,但 $measure['timestamp'] 的值是 RFC3339 格式的字符串:2020-10-01T00:00:00Z
    • 哎呀,不,它不工作。我没有更多错误,但它现在按时间排序,不再按['operation_id','meter_id','conso_prod'],我还必须重新应用 ->values() 到结果
    • 我会按->groupBy(['operation_id', 'meter_id', 'conso_prod']) 分组,然后按时间排序,应该可以了!
    • 我之前从未尝试过按 4 项(最多 1 项)排序,所以我想您必须尝试一下,然后您可以在此处发布是否有效
    猜你喜欢
    • 1970-01-01
    • 2020-05-23
    • 2021-04-13
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2020-09-07
    相关资源
    最近更新 更多