2017-01-11 6 views
2

私は少し助けが必要です。すべてのIDを配列から同期させよう

私はこのように見える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コメントに基づいています。

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

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

エラーがのプロパティを取得しようとすると、「(スロー:あなたのダンプが示唆するように、あなたのforeachループで$valueが実際に配列の場合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

とは何ですか'$ data ['documents']'?それは '$ request-> documents'ではありませんか? – Loek

+0

@Loekうん、それも同様です。しかしそれはポイントではない。ちょうどここで物事をテストする。私は後でリファクタリングします。 – user3641381

+0

あなたのforeachループの値をダンプ(1つ)して質問に追加できますか?あなたのコードは私によく見える – Loek

答えて

0

で値をダンプ

非オブジェクト ")は、実際には$valueが配列であることを確認します。

0

array_map()機能を使用できます。例えばしかし

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

が、これはあなたにこの

// var_export($myIds) 
array(
    0 => 5 
    1 => 6, 
) 
0

のような配列を返します手動で別の配列を再構築するのではなく、Laravel collectionsの電源を使用することができます。

if ($request->has('documents')) { 
    $jig->documents()->sync(collect($request->documents)->pluck('id')); 
} 
関連する問題