Laravel: 20 Laravel Eloquent Tips and Tricks (Phần 2)
https://viblo.asia/p/laravel-20-laravel-eloquent-tips-and-tricks-phan-2-Qpmle2gk5rd
Laravel: 20 Laravel Eloquent Tips and Tricks (Phần 2)
Phần 1: https://viblo.asia/p/laravel-20-laravel-eloquent-tips-and-tricks-phan-1-Do754JR4ZM6
10. BelongsTo Default Models
Hãy xem bạn có Post
phụ thuộc vào Author
và ở Blade code của bạn:
Nhưng điều gì sẽ xảy ra nếu author bị xóa, hoặc không được xét vì 1 vài lý do? Bạn sẽ gặp 1 error, một cái gì đó giống như “property of non-object”
. Dĩ nhiên, bạn có thể ngăn chặn nó bằng cách:
Tuy nhiên, bạn có thể thực hiện nó 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 bài đăng.
Hơn nữa, chúng ta có thể gán các giá trị default property cho default model đó.
11. Order by Mutator
Hãy tưởng tượng bạn có điều này:
Bây giờ, bạn muốn order by theo full_name
? Nó sẽ không hoạt động:
Giải pháp khá đơn giản. Chúng ta cần order kết quả sau khi chúng ta get
chúng:
Lưu ý tên function là khác nhau, nó không phải là orderBy
mà nó là sortBy
.
12. Default ordering in global scope
Điều gì sẽ xảy ra nếu bạn muốn User::all()
luôn được sắp xếp theo field name
? Bạn có thể chỉ định một global scope. Hãy quay lại method boot()
mà chúng ta đã đề cập ở trên.
Đọ thêm về Query Scopes tại đây.
13. Raw query methods
Đôi khi chúng ta cần thêm raw query vào Eloquent statement của chúng ta. May mắn, có functions cho điều này:
14. Replicate: make a copy of a row
Không cần phải giải thích sâu, ở đây, cách tốt nhất để tạo một bản sao của cơ sở dữ liệu:
15. Chunk() method for big tables
Không chính xác là Eloquent related, nó hơn về Collection, nhưng vẫn mạnh mẽ để xử lý các bộ dữ liệu lớn hơn, bạn có thể chia nhỏ chúng thành từng mảnh.
Thay vì:
Bạn có thể làm:
16. Create additional things when creating a model
Tất cả chúng ta đều biết câu lệnh Artisan này:
Nhưng bạn có biết có 3 flags hữu ích để generate các file có liên quan tới model?
-m sẽ tạo 1 migration file
-c sẽ tạo 1 controller
-r sẽ chỉ định rằng controller đó thành resourceful
17. Override updated_at when saving
Bạn có biết phương thức save()
có thể chấp nhận các parameter không? Kết quả là chúng ta có thể nói với nó về việc "ignore" updated_at
chức năng mặc định để được fill vào với timestamp hiện tại. Hãy xem:
Ở đây, chúng ta đã ghi đè default updated_at
với define được xác định trước.
18. What is the result of an update()?
Bạn đã bao giờ tự hỏi những gì code này thực sự return?
Ý tôi là, update được thực hiện trong cơ sở dữ liệu, nhưng biến $result
chứa những gì?
Câu trả lời là nhiều rows bị thay đổi, Vì vậy, nếu bạn cần kiểm tra xem có bao nhiêu row bị ảnh hưởng, bạn không cần phải gọi bất cứ điều gì khác ngoài phương thức update()
, nó sẽ trả về cho bạn con số này.
19. Transform brackets into an Eloquent query
Điều gì xảy ra nếu bạn có and-or mix trong SQL query của bạn, giống như thế này:
Làm thế nào để dịch nó sang Eloquent? đây là 1 cách sai:
Order sẽ không chính xác. Cách đúng phức tap hơn một chút, sử dụng các hàm clossure như sub-queries:
20. orWhere with multiple parameters
Cuối cùng, bạn có thể pass một array của paramenter vào orWhere()
. Cách thông thường:
Bạn có thể làm nó giống như sau:
Hy vọng những chia sẻ trên có thể giúp bạn có giúp ích cho bạn trong việc lập trình với Laravel.
Last updated