2016-12-16 4 views
0

У меня есть список температур, который записывается каждые n минут. Я хочу получить минимальный id и максимальный id для определенной даты. $listDate - это список дат в массиве. например.Laravel красноречивый результат для коллекций

public getTemperature() { 
    $listDate = ['2016-12-08','2016-12-09','2016-12-10','2016-12-11'];  
    foreach($listDate as $date) { 

     $getId = array(); 
     $getId[] = $this->selectRaw('MIN(`id`) as min, MAX(`id`) as max') 
      ->where('created_at', '>=', $date. ' 00:00:00') 
      ->where('created_at', '<=', $date. ' 23:59:59') 
      ->get(); 
    } 
    return $getId; 
} 

Я хочу, чтобы вернуться как коллекции как этот

['min' => 1123, 'max' => 1345], 
['min' => 1349, 'max' => 1567], 
['min' => 1589, 'max' => 1612], 
['min' => 1624, 'max' => 1655], 

ответ

0

Вы только определить массив за пределами цикла:

public getTemperature() { 
    $listDate = ['2016-12-08','2016-12-09','2016-12-10','2016-12-11']; 

    $getId = []; //Define the array here 

    foreach($listDate as $date) { 
     $getId[] = $this->selectRaw('MIN(`id`) as min, MAX(`id`) as max') 
      ->where('created_at', '>=', $date. ' 00:00:00') 
      ->where('created_at', '<=', $date. ' 23:59:59') 
      ->get(); 
    } 
    return $getId; 
} 

Так как написано в вашем OP цикл будет инициализировать массив в каждой итерации.

Надеюсь, это поможет.

1

Каждый раз, когда вы перебирать, хотя в списке вы устанавливаете $getId пустой массив.

Попробуйте

public getTemperature() { 
    $listDate = ['2016-12-08','2016-12-09','2016-12-10','2016-12-11']; 
    $getId = array(); 
    foreach($listDate as $date) {    
     $result = $this->selectRaw('MIN(`id`) as min, MAX(`id`) as max') 
             ->where('created_at', '>=', $date. ' 00:00:00') 
             ->where('created_at', '<=', $date. ' 23:59:59') 
             ->get()->toArray(); 
     array_push($getId, $result); 
    } 
    return $getId; 
} 
Смежные вопросы