2016-11-24 1 views
1

私は製品システムを作成しており、APIとしてLaravelを使用しています。私は多対多の関係を持つProductモデルとFileモデルを持っています。製品にファイルを割り当てる際には、ファイル・オブジェクトの配列をProductコントローラーに渡し、関係がすでに存在するかどうかを確認します。それがなければ私はこの新しい関係を保存します。ここでは、これを行うコードは次のとおりです。Laravel Eloquentは配列に存在しないすべての行を取得します

if(!empty($requestProductVars['files']) && count($requestProductVars['files'])) { 
        $files = $requestProductVars['files']; 

        foreach($files as $file) { 
         $fileId = $file['id']; 
         $fileRecord = File::find($fileId); 
         if(!$product->files->contains($fileRecord)) { 
          $product->files()->save($fileRecord); 
         } 

        } 
       } 
       $product->save(); 

このすべてが正常に動作しますが、私は今実装しようとしていますことは少しトリッキーです。製品にUNASSIGNEDというファイルがある場合、このレコードを製品との関係として削除します。だから、私はそれを行う必要がある$ requestProductVars ['ファイル']配列に存在しないピボットテーブルから行を削除します。

プロジェクトのすべてのファイルIDを取得してオブジェクトの配列と比較し、要求配列に存在しないものはすべて削除することを考えていましたが、これは少し重いリソースのようです。誰もが、この機能がより良い方法で達成されるということを知っていますか?

おかげ

答えて

1

どうsync()メソッドを使用してはどうですか?例えばIDの配列、ことshoud

$product->files()->sync($files); 

$files[1, 2, 3, 4]

$filesは、すべての関係が含まれていない場合は追加/アレイに含まれるすべての行を保持し、他のすべての関係を削除しますします最初にすべての添付ファイルのIDを取得してから、$filesとこの配列を連結させることができます。

+1

私が探していたもの。どうもありがとう。 – devoncrazylegs

関連する問題