TABLE OF CONTENTS

Hi 🤓 Cảm ơn bạn đã ghé thăm blog này, nếu những bài viết trên blog giúp ích cho bạn. Bạn có thể giúp blog hiển thị quảng cáo bằng cách tạm ngừng ad blocker 😫 và để giúp blog duy trì hoạt động nếu bạn muốn.
Cảm ơn bạn!

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 nameauthor 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 nameauthor), 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ố:

  1. Đối số đầu tiên là danh sách các giá trị để insert hoặc update.
  2. Đố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 nameauthor.
  3. Đố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''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''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é!

Có thể bạn thích ⚡
homiedev
About Me

Hi, I'm @devnav. Một người thích chia sẻ kiến thức, đặc biệt là về Frontend 🚀. Trang web này được tạo ra nhằm giúp các bạn học Frontend hiệu quả hơn 🎉😄.

Chúc các bạn tìm được kiến thức hữu ích trong blog này 😁😁.