多對多關係連結時

很多情況會用到多對多的表格,例如:一篇文章可以有多個標籤,一個標籤可以對應多篇文章。
為了符合資料庫正規化,在設計表格時,除了文章、標籤各一個表格,需要第3張表格連結這兩個表格。

articles

article_name

例如上面例子,文章1有music、art、food,3個標籤;而標籤food的有文章1、3,2篇文章。

Laravel提供多種方式去建立和控制這樣多對多的關係,包括最開始的save()也能用。

  • 建立:attach()、sync()、save()
  • 刪去:detach()
  • 切換:toggle()
  • 用上面文章例子,如果要把文章3新增標籤tech和music的話,有幾種寫法:

    Article::find(3)->tags()->attach([1,2]);
    //結果會有三的標籤:1,2,4
    
    Article::find(3)->tags()->sync([1,2],false);
    //結果也會有三個標籤:1,2,4
    //沒有false的話,結果會剩兩個標籤:1,2
    
    Article::find(3)->tags()->saveMany([
    	Tag::find(1),
    	Tag::find(2)
    //save輸入的類型須為model
    //多個時要用saveMany
    

    有三個選項比較

    單個model 多個model

    Laravel 模型关联attach,save,sync方法参数类型验证_Coder_Chang的博客-CSDN博客

    Laravel 模型关联attach,save,sync方法参数类型验证_Coder_Chang的博客-CSDN博客

    Laravel 5 - Many to Many - Attach versus Save

    Eloquent: Relationships