Quay lại

Insert hoặc update multiple records sử dụng upsert trong Laravel 8.x Chuyên mục PHP và Laravel    2023-09-03    450 Lượt xem    83 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Insert hoặc update multiple records sử dụng upsert trong Laravel 8.x

Đôi khi, điều này sẽ hữu ích khi bạn không chắc mình muốn insert hay update bản ghi hay không và bạn để hệ thống quyết định điều đó. Laravel có một tính năng như vậy cho phép bạn làm điều đó.

Phương pháp Upsert

Trình tạo truy vấn của Laravel 8.x đi kèm với một phương thức gọi là upsert cho phép bạn insert (nhiều) hàng không tồn tại và cập nhật các hàng đã tồn tại với các giá trị mới.

Vì vậy, chẳng hạn, giả sử bạn có một bảng tên là books và hiện tại nó chứa các bản ghi sau.

 

name author quantity
J.K. Rowling Harry Potter 6
Ruskin Bond Angry River 10

 

Như bạn có thể thấy, có ba trường dành cho những table books mà tôi đã trình bày ở đây nhưng trong đời thực, có thể có nhiều trường. Để đơn giản, mình đã bỏ qua các trường khác.

Ngoài ra, hãy lưu ý rằng ở đây, trường tên và tác giả là duy nhất cho bảng books.

Bây giờ, hãy xem xét tình huống này, trong đó bạn đang thêm nhiều bản ghi vào bảng nhưng có thể có một số bản ghi giống hệt nhau về trường tên và tác giả. Trong những trường hợp như vậy, bạn muốn cập nhật trường số lượng.

Đây là lúc phương pháp upsert có thể phát huy tác dụng. Đây là cách nó hoạt động.

DB::table('books')->upsert([
    [
        'name' => 'J.K. Rowling', 
        'author' => 'Harry Potter', 
        'quantity' => 15
    ],
    [
        'name' => 'Cal Newport', 
        'author' => 'Deep Work', 
        'quantity' => 20
    ]
], ['name', 'author'], ['quantity']);

Như bạn có thể thấy, phương thức upsert chấp nhận ba đối số.

Đối số đầu tiên bao gồm các giá trị cần insert hoặc update.

Đối số thứ hai liệt kê (các) cột xác định duy nhất các bản ghi (trường nameauthor trong trường hợp của chúng ta) trong bảng được liên kết.

Đối số thứ ba và cuối cùng là một mảng các cột cần được cập nhật nếu bản ghi phù hợp đã tồn tại trong cơ sở dữ liệu. Chúng ta muốn số lượng được cập nhật trong trường hợp của chúng ta.

Trong ví dụ của chúng ta, sự kết hợp “J.K. Rowling” và “Harry Potter” đã tồn tại trong bảng sách và vì vậy truy vấn nâng cấp của chúng ta sẽ cập nhật bảng sách lên trạng thái sau.

name author quantity
J.K. Rowling Harry Potter 15
Ruskin Bond Angry River 10
Cal Newport Deep Work 20

Như bạn có thể thấy, chỉ có số lượng kết hợp “J.K. Rowling” và “Harry Potter” đã được thay đổi nhưng sự kết hợp “Cal Newport” và “Deep Work” được thêm vào như một record mới vào bảng.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday