Laravelで中間テーブルの内容を変更したい
Laravel 5.0 で作られたブログで、投稿記事テーブル posts と タグテーブル tags を中間テーブルの post_tag で結んでいます。(多対多)
中間テーブルは post_id、tag_id で構成されています。
1つの記事は複数のタグを持ち、タグは複数の記事で利用されています。
新規記事にタグを割り当てる際、
$post = new Post();
$tag = Tag::find(1);
$post->tags()->save($tag);
のようにして追加しています。
仮にある記事がタグID「1, 2, 3」を持っていたとして、編集によって「1, 3, 4」という結果になる時、タグ2を消してタグ4を追加することになります。
今のところ関連するタグを全て消してから新規にタグを再割当てしていますが、変更のあったものだけ修正するにはどのようにすればいいのでしょうか?
DB::table('post_tag')->where('post_id', '=', $postId)->delete();
$tags = array(1, 3, 4);
foreach($tags as $tagId){
$tag = Tag::find($tagId);
$post->tags()->save($tag);
}