Làm cách nào để xóa dữ liệu mối quan hệ trong Laravel?
Một mẫu mà tôi thường gặp khi phát triển biểu mẫu là biểu mẫu chứa mối quan hệ 0. Ví dụ: một biểu mẫu công thức có khả năng thêm các thành phần Show Laravel giúp dễ dàng xác thực một biểu mẫu như thế này, nhờ. Ít rõ ràng hơn một chút là tạo, cập nhật và xóa các mô hình liên quan (trong trường hợp này là các thành phần) Trong bài viết này, tôi sẽ giải thích cho bạn cách tạo một macro cho phép bạn gọi 1 trên các mối quan hệ Eloquent 0
Cảm thấy tự do ngay lập tức Trước khi xử lý macro, hãy nghĩ xem chúng ta sẽ xử lý vấn đề này như thế nào Việc gửi biểu mẫu đầu tiên của biểu mẫu công thức của chúng tôi rất đơn giản. Tất cả các thành phần đều mới, vì vậy chúng tôi chỉ có thể tạo ra chúng
Nhưng điều đó sẽ không hiệu quả đối với các lần gửi biểu mẫu tiếp theo, những điều này có thể dẫn đến các tình huống khác nhau. Thành phần có thể bị thay đổi, thiếu hoặc hoàn toàn mới
Như bạn có thể thấy trong dữ liệu yêu cầu giả định, yêu cầu thứ hai chứa id của các thành phần hiện có. Với thông tin này, chúng tôi có thể xác định thành phần nào sẽ được tạo, cập nhật hoặc xóa Các thành phần có id nên được cập nhật và những thành phần không có id được tạo. Đối với hai trường hợp này, chúng ta có thể sử dụng các phương thức 3 hoặc 4 của Laravel. Tôi sẽ sử dụng vì phương thức này có thể xử lý nhiều bản ghi trong một lần (một truy vấn SQL)⚠️ Nếu bạn muốn dấu thời gian của 5 được cập nhật chính xác hoặc dựa vào , thì bạn nên sử dụng 3 thay vì 4. Điều này sẽ yêu cầu bạn lặp lại tất cả các thành phần đến và chuyển chúng vào phương thức 3Trước khi xem macro, hãy xem cách upert hoạt động 2Đối số đầu tiên chứa tất cả các giá trị thành phần (lưu ý rằng chúng ta phải bao gồm khóa ngoại 9 theo cách thủ công). Đối số thứ hai liệt kê (các) cột xác định duy nhất các bản ghi (trong trường hợp này, chúng tôi sử dụng 0)ℹ️ Chúng ta có thể thêm đối số thứ ba để cung cấp một mảng có các cột sẽ được cập nhật khi tìm thấy bản ghi phù hợp. Trong trường hợp của chúng tôi, tất cả chúng đều có thể được cập nhật, vì vậy chúng tôi có thể bỏ qua đối số này Để xóa các thành phần còn thiếu, chúng ta có thể sử dụng 1 kết hợp với 2. Việc xóa phải xảy ra trước khi upsert, nếu không các bản ghi mới được thêm vào cũng sẽ bị xóa 7Bây giờ hãy kết hợp mọi thứ chúng ta đã học vào một macro Hãy định nghĩa một macro trong phương thức 3 4. Tên của macro sẽ là 5 và nó sẽ chấp nhận 6. Một iterable có thể là một mảng hoặc thậm chí là một bộ sưu tập Laravel 2Laravel tự động liên kết 7 với phiên bản 8. Chúng tôi sẽ sử dụng bản ghi đó cùng với các bản ghi để tạo một phiên bản của lớp macro của chúng tôi. Chúng ta có thể gọi thể hiện của 9 giống như một hàm, vì chúng ta sẽ làm cho nó trở nên bất khả xâm phạmTrước tiên, hãy đảm bảo rằng các bản ghi (thành phần) thực sự thuộc về mô hình gốc (công thức). Chúng tôi không muốn mọi người lướt qua id mà họ không có quyền truy cập (cảm ơn Marek đã chú ý đến điều này). Chúng tôi sẽ lọc ra các bản ghi không mong muốn trong hàm tạo 6Trong phương thức 20, chúng tôi gói các phương thức xóa và nâng cấp trong một giao dịch. Hoặc là mọi thứ đều thất bại, hoặc mọi thứ đều thành công. Và như đã đề cập trước đây, chúng tôi thực hiện xóa trước khi upsert 8Việc triển khai 21 khá giống với những gì chúng ta đã thấy trước đây, nhưng có một số điểm khác biệt. Thay vì mã hóa cứng 0, chúng tôi lấy tên khóa từ bảng liên quan (thành phần). Khi chúng tôi có tên khóa, chúng tôi có thể lấy id và lọc ra bất kỳ giá trị trống nào 1Việc xóa sau đó được thực hiện trên một bản sao của truy vấn. Bản sao là cần thiết vì nếu không thì mệnh đề 1 sẽ vẫn xuất hiện trong truy vấn khi chúng tôi sử dụng nó để cập nhậtTrong 24, chúng tôi ánh xạ các bản ghi và thêm khóa ngoại. Chúng tôi cũng đảm bảo rằng 0 luôn hiện diện, ngay cả đối với các bản ghi mới ( 26). Điều này là cần thiết để 4 hoạt động chính xác 7Một số người có thể thích 3 hơn 4, những người khác có thể đang sử dụng UUID. Tuy nhiên, bây giờ bạn đã có tất cả kiến thức cần thiết để sử dụng macro này hoặc một biến thể phù hợp nhất với tình huống của bạn
Làm cách nào để xóa dữ liệu quan hệ trong Laravel?Để xóa một mô hình trực tiếp, gọi hàm delete() trên mô hình đó và không xác định trình nghe xóa trong phương thức khởi động của mô hình hoặc xác định một phương thức xóa trống. If you want to further delete relations of a related model, you will define a deleting listener in the boot method of that model and delete the relations there.
Làm cách nào để xóa cứng các bản ghi trong Laravel?Bạn có thể xóa vĩnh viễn một bản ghi khỏi cơ sở dữ liệu bằng phương thức forceDelete. Người dùng. first()->forceDelete(); Nếu bạn muốn dọn dẹp cơ sở dữ liệu của mình thường xuyên và tự động xóa các mô hình đã xóa mềm, điều này được gọi là cắt tỉa.
Làm cách nào để xóa nhiều dữ liệu trong Laravel?Bạn có thể sử dụng phương thức destroyMultiple và chuyển một hoặc nhiều khóa chính cho phương thức đó dưới dạng yêu cầu biểu mẫu . Bạn cũng có thể sử dụng tùy chọn này để xóa các bản ghi có thông số tùy chỉnh. Bưu kiện. trong đó ('tiêu đề', 'Laravel')-> xóa(); .
Làm cách nào để xóa tất cả dữ liệu khỏi bảng trong Laravel?Bản ghi của chúng tôi sẽ tự động bị xóa khỏi bộ đệm nếu người dùng xóa tất cả bản ghi khỏi bảng. Nhưng chúng ta chỉ có thể xóa nó khỏi bộ đệm nếu chúng ta đang sử dụng mô hình của Laravel Eloquent. Trong ví dụ đầu tiên, chúng ta sẽ sử dụng hàm truncate() , được sử dụng để xóa tất cả các bản ghi. |