我需要一点帮助。
我有一个documents
数组,看起来像这样。
我正在寻找的只是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
}
答案 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'));
}