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
name
và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
quantity
nế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é!