Cảm ơn bạn!
Method upsert laravel là gì? Tạo và cập nhật record chỉ với một lệnh query
Method upsert trong Lavarel
Query builder của Laravel 8.x giới thiệu một method có tên là upsert cho phép chúng ta insert nhiều records (bản ghi) chưa có trong bảng và update các records nếu chúng đã tồn tại bằng các giá trị mới.
Giả sử chúng ta có một bảng gọi là books và nó chứa các record như dưới đây:
| name | author | quantity |
|---|---|---|
| The Silence of the Lambs | Thomas Harris | 10 |
| Norwegian Wood | Haruki Murakami | 8 |
Như bạn có thể thấy, ở bảng trên chúng ta có 3 field, thực tế có thể có nhiều field hơn. Trong bảng books này, chúng ta có cặp field name và author là unique.
Khi bạn thêm nhiều record vào bảng nhưng có thể có một số record giống nhau (giống name và author), trong những trường hợp như vậy, bạn muốn update lại field quantity. Để xử lý trường hợp này thì chúng ta có thể sử dụng method upsert.
DB::table('books')->upsert([
[
'name' => 'Norwegian Wood',
'author' => 'Haruki Murakami',
'quantity' => 12
],
[
'name' => 'The Adventures of Tom Sawyer',
'author' => 'Mark Twain',
'quantity' => 17
]
], ['name', 'author'], ['quantity']);Method upsert nhận 3 đối số:
- Đối số đầu tiên là danh sách các giá trị để insert hoặc update.
- Đối số thứ hai sử dụng cột là primary hoặc unique của bảng để kiểm tra tồn tại của các record hiện có. Trong ví dụ trên chúng ta sử dụng
namevàauthor. - Đối số thứ ba là mảng chứa cột cần được update giá trị nếu record tồn tại trong database. Ở ví dụ trên chúng ta sẽ update lại giá trị cho cột
quantitynếu record tồn tại trong database.
Ta thấy cặp giá trị 'Norwegian Wood' và 'Haruki Murakami' đã tồn tại trong bảng books. Do đó, method upsert sẽ update lại quantity cho record này. Những record khác nếu chưa tồn tại sẽ được thêm mới và bảng books sẽ được như sau:
| name | author | quantity |
|---|---|---|
| The Silence of the Lambs | Thomas Harris | 10 |
| Norwegian Wood | Haruki Murakami | 12 |
| The Adventures of Tom Sawyer | Mark Twain | 17 |
Như các bạn thấy ở trên, giá trị quantity của 'Norwegian Wood' và 'Haruki Murakami' đã được update lại đồng thời record mới có name là 'The Adventures of Tom Sawyer' và author là 'Mark Twain' được thêm vào bảng.
Hi vọng bài viết giúp ích cho các bạn. Chúng ta sẽ gặp lại nhau trong các bài viết mới nhé!
