2016-08-29 6 views
0

У меня есть коллекция в Laravel 5.3, который я создал после запроса, это dd() только один элемент, не хотел спам, много ...Laravel -> получить() возвращение нулевой

Collection {#950 
    #items: array:1 [ 
    0 => Callrail {#942 
     #table: "callrails" 
     #appends: [] 
     #with: [] 
     #hidden: [] 
     #casts: [] 
     #connection: null 
     #primaryKey: "id" 
     #keyType: "int" 
     #perPage: 15 
     +incrementing: true 
     +timestamps: true 
     #attributes: array:2 [ 
     "hourofday" => 1 
     "calls" => 2 
     ] 
     #original: array:2 [ 
     "hourofday" => 1 
     "calls" => 2 
     ] 
     #relations: [] 
     #visible: [] 
     #fillable: [] 
     #guarded: [] 
     #dates: [] 
     #dateFormat: null 
     #touches: [] 
     #observables: [] 
     +exists: true 
     +wasRecentlyCreated: false 
     #forceDeleting: false 
     -originalData: [] 
     -updatedData: [] 
     -updating: false 
     -dontKeep: [] 
     -doKeep: [] 
     #dirtyData: [] 
    } 
    ] 
} 

EDIT # 1:

Вот $calls->toJSON() выход:

[ 
    { 
     "hourofday":1, 
     "calls":2 
    }, 
    { 
     "hourofday":15, 
     "calls":1 
    }, 
    { 
     "hourofday":16, 
     "calls":4 
    }, 
    { 
     "hourofday":18, 
     "calls":7 
    }, 
    { 
     "hourofday":19, 
     "calls":2 
    }, 
    { 
     "hourofday":20, 
     "calls":1 
    }, 
    { 
     "hourofday":22, 
     "calls":2 
    } 
] 

проблема заключается в том, когда я пытаюсь сделать:

$i = 0; 
    while($i != 24) { 
     $response[] = array(
      'name' => date('g A', strtotime('2016-01-01 '.$i.':00:00')), 
      'y' => $calls->whereStrict('hourofday', $i)->get('calls', 0); 
     ); 
     $i++; 
    } 

Каждое значение в $response всегда имеет 0 или null, если я не ставлю значение по умолчанию в. Существуют значения, они находятся в коллекции, и правильно отформатирован, но по какой-то причине я не могу взять их. Есть что-то, чего я не хватает?

Текущая документация:

https://www.laravel.com/docs/5.3/collections#method-get

EDIT # 2:

Найден ответ с помощью @Andrej Ludinovskov и правильный ответ:

$i = 0; 
while($i != 24) { 
    // You have to get the first item in the array, then you can use it like normal 
    $callCount = $calls->whereStrict('hourofday', $i)->first(); 
    $response[] = array(
     'name' => date('g A', strtotime('2016-01-01 '.$i.':00:00')), 
     'y' => ($callCount?$callCount->calls:0) 
    ); 
    $i++; 
} 

ответ

0

У вас есть коллекция элементов и он имеет ключи от 0 до n. Ключ «вызовы» - это ключ к элементу этой коллекции. Так что ваш код должен выглядеть следующим образом:

$i = 0; 
while($i != 24) { 
    $item = $calls->whereStrict('hourofday', $i)->get(0, null); 
    $cnt = 0; 
    if ($item != null) { 
     $cnt = $item->calls 
    } 
    $response[] = array(
      'name' => date('g A', strtotime('2016-01-01 '.$i.':00:00')), 
      'y' => $cnt 
     ); 
    $i++; 

}

+0

Это приводит в 'вызов функции-члена, где() на integer' ошибки, что делает еще меньше смысла ... –

+0

А также, когда я try 'dd ($ calls-> whereStrict ('hourofday', $ i)), он дает мне эту коллекцию, которая находится в исходном вопросе. Должен ли я делать '-> first()' before '-> get()'? –

+0

Vars перекрывают друг друга. Проверьте текущий код. –