firstOrCreate()
kiểm tra tất cả các đối số có trước khi nó finds
khớp hay không. Nếu không phải tất cả các đối số đều khớp, thì một phiên bản mới của mô hình sẽ được tạo.
Nếu bạn chỉ muốn kiểm tra trên một trường cụ thể, thì hãy sử dụng firstOrCreate(['field_name' => 'value'])
với chỉ một mục trong mảng. Thao tác này sẽ trả về mục đầu tiên phù hợp hoặc tạo một mục mới nếu không tìm thấy mục phù hợp.
Sự khác biệt giữa firstOrCreate()
và firstOrNew()
:
firstOrCreate()
sẽ tự động tạo một mục mới trong cơ sở dữ liệu nếu không tìm thấy kết quả phù hợp. Nếu không nó sẽ cung cấp cho bạn mục phù hợp.
firstOrNew()
sẽ cung cấp cho bạn một cá thể mô hình mới để làm việc nếu không tìm thấy kết quả phù hợp, nhưng sẽ chỉ được lưu vào cơ sở dữ liệu khi bạn làm như vậy một cách rõ ràng (gọi save()
trên mô hình). Nếu không nó sẽ cung cấp cho bạn mục phù hợp.
Lựa chọn giữa cái này hay cái kia tùy thuộc vào những gì bạn muốn làm. Nếu bạn muốn sửa đổi cá thể mô hình trước khi nó được lưu lần đầu tiên (ví dụ: thiết lập một name
hoặc một số trường bắt buộc), bạn nên sử dụng firstOrNew()
. Nếu bạn chỉ có thể sử dụng các đối số để tạo ngay một cá thể mô hình mới trong cơ sở dữ liệu mà không cần sửa đổi nó, bạn có thể sử dụng firstOrCreate()
.