在用Laravel ORM存資料時常常不確定該用哪個方法,有時候可以save有時候不行@_@
所以幫自己整理一下幾個方法的差別。
編輯資料庫資料時可用。例如,我想把使用者表格第一筆資料的名字改成小華。
User::find(1)->save(['name'=>'小華']);
也可以一次編輯同筆資料內多個欄位的內容
User::find(1)->save([
'name'=>'小華',
'email'=>'flower@gmail.com'
'sex'=>'male'
]);
很多情況會用到多對多的表格,例如:一篇文章可以有多個標籤,一個標籤可以對應多篇文章。
為了符合資料庫正規化,在設計表格時,除了文章、標籤各一個表格,需要第3張表格連結這兩個表格。
articles
id | article_name |
---|
1|article1|
2|article2|
3|article3|
4|article4|
tags
id | tag_name |
---|
1|tech|
2|music|
3|art|
4|food|
article_tag
article_id | tag_id |
---|
1|2|
1|3|
1|4|
3|4|
例如上面例子,文章1有music、art、food,3個標籤;而標籤food的有文章1、3,2篇文章。
Laravel提供多種方式去建立和控制這樣多對多的關係,包括最開始的save()也能用。
用上面文章例子,如果要把文章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
方法 | 單個id | 多個id | 單個model | 多個model |
---|---|---|---|---|
save() | V | 要用saveMany() | ||
attach() | V | V | V | |
sync() | V | V | V |
哪時候要寫括號,哪時候不用要注意。例如下面範例實作時tags
要括號。
Article::find(1)->tags()->attach(1);
詳細測試可以看這篇(但他開頭的表格好像寫錯了):
Laravel 模型关联attach,save,sync方法参数类型验证_Coder_Chang的博客-CSDN博客
Laravel 模型关联attach,save,sync方法参数类型验证_Coder_Chang的博客-CSDN博客
Laravel 5 - Many to Many - Attach versus Save