在每个元素内添加新元素到Laravel集合对象

时间:2017-11-29 06:35:51

标签: php laravel

我想在Laravel中的Laravel对象集合中为每个现有元素添加新元素。我的目标是这样的,

object(Illuminate\Support\Collection)#178 (1) {
  ["items":protected]=>
  array(10) {
    [0]=>
    object(stdClass)#175 (4) {
      ["fname"]=>
      string(6) "xxx"
      ["lname"]=>
      string(5) "xxx"
      ["data2"]=>
      string(3) "xxx"
      ["callid"]=>
      string(17) "xxx"
    }
    [1]=>
    object(stdClass)#179 (4) {
      ["fname"]=>
      string(6) "xxx"
      ["lname"]=>
      string(5) "xxx"
      ["data2"]=>
      string(2) "62"
      ["callid"]=>
      string(17) "xxx"
    }
}  

所以我需要添加类似[" phonenumber"] => string(17)" xxx"每个街区。然后对象看起来像这样,

object(Illuminate\Support\Collection)#178 (1) {
      ["items":protected]=>
      array(10) {
        [0]=>
        object(stdClass)#175 (4) {
          ["fname"]=>
          string(6) "xxx"
          ["lname"]=>
          string(5) "xxx"
          ["data2"]=>
          string(3) "xxx"
          ["callid"]=>
          string(17) "xxx"
         ["phonenumber"]=>
          string(17) "xxx"
        }
        [1]=>
        object(stdClass)#179 (4) {
          ["fname"]=>
          string(6) "xxx"
          ["lname"]=>
          string(5) "xxx"
          ["data2"]=>
          string(2) "62"
          ["callid"]=>
          string(17) "xxx"
          ["phonenumber"]=>
          string(17) "xxx"
        }
    }  

我的代码是这样的

     $resultsInCalls....    
       foreach ($resultsInCalls as $key=>$value) {

                $resultsUserNumber =  DB::table('qlog')
                ->select('data2')
                ->where('event', '=', 'ENTERQUEUE')
                ->where('callid', '=', $value->callid)
                ->get();  


               $resultsInCalls->push('phoneNumber', $resultsUserNumber['0']->data2);

}

但是上面的代码添加了这样的东西,而不是预期的结果,

 [5]=>
    string(11) "phoneNumber"
 [6]=>
    string(11) "phoneNumber"
 [7]=>
    string(11) "phoneNumber"
 [8]=>
    string(11) "phoneNumber"
 [9]=>
    string(11) "phoneNumber"

如何获得预期结果。请帮忙。

1 个答案:

答案 0 :(得分:2)

使用每个

循环集合
$resultsInCalls = $resultsInCalls->each(function ($item, $key) {
     $resultsUserNumber =  DB::table('qlog')
                ->select('data2')
                ->where('event', '=', 'ENTERQUEUE')
                ->where('callid', '=', $item->callid)
                ->get();  
               $item->phoneNumber = $resultsUserNumber['0']->data2;
});

更好的方法是使用关系或联接