从口才的Laravel获取第一个和最后一个元素

时间:2018-11-13 14:16:53

标签: php laravel eloquent

我想知道是否有任何方法可以使用Laravel雄辩的方法来获取按日期分组的数据的第一个和最后一个值。 我需要将数据放在TradingView蜡烛图上,并且它需要特定的格式,如下所示:

{
  t:'unix timestamps',
  v:'volumes',
  h:'higher prices',
  l:'lower prices',
  o:'open prices',
  c:'close prices'
}

我的代码是:

$trans = Transacoes::where('created_at', '>=', $end->subMinutes($minute))
        ->groupBy('t')
        ->orderBy('t', 'DESC')
        ->get([
            DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d %H:%i") as t'),
            DB::raw('sum(amount) as "v"'),
            DB::raw('max(`price`) as h'),
            DB::raw('min(`price`) as l'),
            DB::raw('first(`price`) as o'),
            DB::raw('last(`price`) as c'),
        ])
        ->toArray();

我知道对于MySQL不存在first()last()函数,但是我这样写,所以更容易理解我要做什么。

我的数组当前正在返回:

{
    "t": "2018-11-13 12:20", 
    "v" : "0.04536078", 
    "h" : "24249.98", 
    "l": "24249.97"
 }, 
 {...}, 

我需要包括每个阵列的开盘价和收盘价,例如:在对应于12:20的那一刻,有4笔交易,我需要知道哪个是第一个交易,哪个是这时最后一个,并将其包含在索引为“ o”和“ c”的数组的每个元素中

1 个答案:

答案 0 :(得分:0)

$first = array_key_exists(0,$trans)?$trans[0]:"";
$last= array_key_exists(count($trans)-1,$trans)?$trans[count($trans)-1]:"";

I assume you have $trans as an array