同步阵列中的所有ID

时间:2017-01-11 12:11:13

标签: php laravel laravel-5.2

我需要一点帮助。

我有一个documents数组,看起来像这样。

enter image description here

我正在寻找的只是sync所有具有现有数据透视表的ID。

if($request->has('documents')) 
   {
    $arr = [];

    foreach ($data['documents'] as  $value) {

      $arr[] = $value->id // ain't doing the trick; error "Trying to get property of non-object"
    }
      //var_dump($arr);
     $jig->documents()->sync($arr);
  }

我理解sync()方法采用数组。

$arr = [1,2,3];

如何将documents数组中的ID转换为这样的?

感谢您的时间!

更新#1 根据评论。

转储foreach

中的值
    array(8) {
  ["id"]=>
  int(5)
  ["name"]=>
  string(13) "Reyna Bartell"
  ["description"]=>
  string(4) "Cum."
  ["relative_path"]=>
  string(9) "Voluptas."
  ["created_by"]=>
  NULL
  ["created_at"]=>
  string(19) "2016-12-28 14:27:58"
  ["updated_at"]=>
  string(19) "2016-12-28 14:27:58"
  ["updated_by"]=>
  NULL
}
array(8) {
  ["id"]=>
  int(6)
  ["name"]=>
  string(20) "Ms. Abigail Schaefer"
  ["description"]=>
  string(4) "Aut."
  ["relative_path"]=>
  string(4) "Quo."
  ["created_by"]=>
  NULL
  ["created_at"]=>
  string(19) "2016-12-28 14:27:58"
  ["updated_at"]=>
  string(19) "2016-12-28 14:27:58"
  ["updated_by"]=>
  NULL
}

3 个答案:

答案 0 :(得分:0)

如果foreach循环中的$value实际上是转储建议的数组:

// Change this line
$arr[] = $value->id;

// To this
$arr[] = $value['id'];

抛出的错误("试图获取非对象的属性")确认$value实际上是一个数组,所以这应该有效。

答案 1 :(得分:0)

您可以使用array_map()功能。例如

content

但是,这会返回一个像这样的数组

$myIds = array_map(function($v) {
    return $v['id'];
}, $data['documents']);

答案 2 :(得分:0)

您可以使用Laravel collections的强大功能,而不是手动将一个阵列重建为另一个阵列:

if ($request->has('documents')) {
   $jig->documents()->sync(collect($request->documents)->pluck('id'));
}