繁体   English   中英

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++;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM