12319
Laravel 5.0 で作られたブログで、投稿記事テーブル posts と タグテーブル tags を中間テーブルの post_tag
で結んでいます。（多対多）  
中間テーブルは post_id、tag_id で構成されています。  
１つの記事は複数のタグを持ち、タグは複数の記事で利用されています。

新規記事にタグを割り当てる際、

```

    $post = new Post();
    $tag = Tag::find(1);
    $post->tags()->save($tag);
    
```

のようにして追加しています。

仮にある記事がタグID「1, 2, 3」を持っていたとして、編集によって「1, 3, 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);
    }
    
```
CC BY-SA 3.0
2015-07-13T03:27:38.537
12312
2015-07-13T09:06:39.560
10083
question
php laravel
Laravelで中間テーブルの内容を変更したい
```

    $tags = array(1, 3, 4);
    $post->tags()->sync($tags);
    
```

でできると思います。
CC BY-SA 3.0
2015-07-13T09:06:39.560
12319
2015-07-13T09:06:39.560
10364
12312
answer