Laravel ->get() 返回 null
Laravel ->get() returning null
我在 Laravel 5.3 中有一个集合,是我在查询后创建的,这个 dd()
只是一个项目,不想发送太多垃圾邮件...
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: []
}
]
}
编辑#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
编辑#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 到 n。键 'calls' 是该集合中某项的键。所以你的代码应该是这样的:
$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++;
}
我在 Laravel 5.3 中有一个集合,是我在查询后创建的,这个 dd()
只是一个项目,不想发送太多垃圾邮件...
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: []
}
]
}
编辑#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
编辑#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 到 n。键 'calls' 是该集合中某项的键。所以你的代码应该是这样的:
$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++;
}