Получить первый и последний элемент от Eloquent Laravel - PullRequest
0 голосов
/ 13 ноября 2018

Хотелось бы узнать, есть ли способ получить первое и последнее значение данных, сгруппированных по дате, используя 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();

Я знаю, что функции first() и last() не существуют для MySQL, но я написал так, чтобы было легче понять, что я пытаюсь сделать.

Мой массив в настоящее время возвращает:

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

Мне нужно было включить цену открытия и цену закрытия для каждого из массивов, например: в минуту, соответствующую 12:20, было 4 транзакции, мне нужно знать, какая была первой, а какая - последний в эту минуту и ​​включает его в каждый элемент массива с индексами "o" и "c"

1 Ответ

0 голосов
/ 13 ноября 2018
$first = array_key_exists(0,$trans)?$trans[0]:"";
$last= array_key_exists(count($trans)-1,$trans)?$trans[count($trans)-1]:"";

Я предполагаю, что у вас есть $trans как массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...