Laravel: 20 Laravel Eloquent Tips and Tricks (Phần 1)
https://viblo.asia/p/laravel-20-laravel-eloquent-tips-and-tricks-phan-1-Do754JR4ZM6
Laravel: 20 Laravel Eloquent Tips and Tricks (Phần 1)
Bài đăng này đã không được cập nhật trong 4 năm
Trong quá trình tìm hiểu về Laravel mình có thu lượm được một số tip và trick. Mình xin được chia sẻ lại cho các bạn.
Eloquent ORM có vẻ là một cơ chế đơn giản, nhưng đi xâu vào chi tiết, có rất nhiều semi-hidden function và ít được biết đến. Trong bài viết này, tôi sẽ chỉ cho các bạn một vài thủ thuật.
1. Increments and Decrements
Thay vì điều này:
Bạn có thể làm như bên dưới:
Bạn cũng có thể truyền thêm các tham số:
2. XorY methods
Eloquent có một vài function kết hợp hai phương thức, như “hãy làm X, nếu không thì Y”.
Ví dụ 1 : findOrFail()
:
Thay vì:
Hãy làm như sau:
Ví dụ 2: firstOrCreate()
:
Thay vì:
Hãy làm như sau:
3. Model boot() method
Có một nơi huyền diệu được gọi là boot () trong một Eloquent model, nơi bạn có thể ghi đè lên hành vi mặc định:
Có lẽ một trong những ví dụ phổ biến nhất là thiết lập giá trị một số trường tại thời điểm tạo model object. Giả sử bạn muốn tạo trường UUID
tại thời điểm đó.
4. Relationship with conditions and ordering
Đây là một cách điển hình để xác định relationship:
Nhưng bạn có biến rằng ngay tại thời điểm này, chúng ta có thể thêm các điều kiện where
và orderBy
. Ví dụ, nếu bạn muốn một relationship cụ thể cho một số loại users
, cũng như orderBy
theo email
, bạn có thể lam như sau:
5. Model properties: timestamps, appends etc.
Có một vài "tham số" của một Eloquent model, dưới dạng các property của class đó. Phổ biến nhất có lẽ là:
Nhưng xin chờ chút, hãy xem những thứ ở dưới:
Và còn nhiều hơn nữa, tôi đã liệt kê những điều thú vị nhất, để biết thêm, hãy kiểm tra code của abstract Model class mặc định và kiểm tra tất cả các trait được sử dụng. And there’s even more, I’ve listed the most interesting ones, for more please check out the code of default abstract Model class and check out all the traits used.
6. Find multiple entries
Mọi người đều biết find()
method, đúng ko?
Tôi khá ngạc nhiên khi ít người biết rằng nó có thể chấp nhận nhiều ID như một mảng:
7. WhereX
Có một cách đơn giản để làm điều này:
Như sau:
Vâng, bạn có thể thay đổi tên của bất kỳ field nào và thêm nó vào như một hậu tố của function where
và nó sẽ hoạt động: Ngoài ra, có một số pre-defined method trong Eloquent, liên quan date/time
:
8. Order by relationship
Một "mẹo nhỏ" phức tạp hơn một chút. Điều gì sẽ xảy ra nếu bạn có chủ đề trên diễn đàn nhưng muốn ```order``` chúng theo bài đăng mới nhất? Yêu cầu khá phổ biến trong các diễn đàn với các chủ đề cập nhật mới nhất ở trên top, phải không?
Đầu tiên, mô tả relationship riêng biệt cho bài đăng mới nhất về chủ đề:
Và sau đó, trong controller của chúng ta, ta có thể làm điều "magic" này:
9. Eloquent::when() – no more if-else’s
Nhiều người trong chúng ta viết các truy vấn có điều kiện với "if-else" như thế này:
Nhưng có một cách tốt hơn bằng cách sử dụng when()
function:
Nó có thể không ngắn hơn, nhưng mạnh nhất là truyền các parameter:
10. BelongsTo Default Models
Giả sử bạn có Post belongTo
Author và sau đó là Blade code:
Nhưng nếu author
bị xóa hoặc không được set vì một lý do nào đó thì sao? Bạn sẽ nhận được một lỗi, đại loại là "property of non-object".
Dĩ nhiên, bạn có thể phòng ngừa nó như sau:
Nhưng bạn có thể làm điều đó trên Eloquent relationship:
Trong ví dụ này, author() relation sẽ trả về một empty App\Author
model nếu không có author
nào được đính kèm vào post
. Hơn nữa, chúng ta có thể gán giá trị default property cho default modedl đó.
Last updated