Laravel belongsToMany::attachの挙動が単純追加なんだけどそれでいいのか?— nojimage (@nojimage) 2014, 8月 21
Inserting Related Models – Laravel Documentation
LaravelのEloquentでのお話。belongsToManyでリレーションを作って、attachで関連を追加するぜーとしてみてところ、同じIDをいれても再現なく関連が追加される。
コードを確認すると、存在チェックを行わず単純にInsertしているだけだった。
存在チェックを行った上で関連を追加するには、sync
メソッドの第2引数をfalse
にして呼び出すとよいぽぃ。(他に適切なやり方があれば教えてください。
$post->tags()->sync([$id], false);
なお、sync
の第1引数は配列である必要がある。また、false
の指定を忘れると、指定以外の関連を削除してくれる(こっちが本来の挙動)ので気をつけるべし。