2016-08-29 13 views
0

を返す私は、クエリ後に作成Laravel 5.3のコレクションを持って、このdd()Laravel - >を取得()がnull

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までのキーがあります。キー '通話'は、このコレクションのアイテムのキーです。だからあなたのコードは次のようになります。

でもあまり意味がありますinteger`エラー、上の()メンバ関数に `コールになり
$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

... –

+0

そしてまた、ときに私'dd($ calls-> whereStrict( 'hourofday'、$ i))'を試してみると、それは私に元の質問のコレクションを与えます。 ' - > get()'の前に ' - > first()'をしなければなりませんか? –

+0

バールは互いに重なっています。現在のコードを確認してください。 –

関連する問題