Một trong những điểm mạnh của Laravel là cú pháp thanh lịch của nó. Nếu bạn có nhiều mô hình và mối quan hệ trong Laravel (do có nhiều bảng trong cơ sở dữ liệu), việc duyệt qua thường có thể kết thúc bằng mã kém thanh lịch. Theo thời gian, ba phần mở rộng nhỏ đã chứng minh giá trị của chúng đối với tôi, mà tôi muốn giới thiệu ngắn gọn dưới đây. Chúng tôi chỉ sử dụng một số kế thừa, phương pháp ma thuật và bộ sưu tập tùy chỉnh.
Đầu tiên, chúng tôi tạo một mô hình mới trong app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Sau đó, chúng tôi để tất cả các mô hình kế thừa từ ConvenienceModel mới của chúng tôi:
b45e29b9125c2ab565b5526442437686
Kết hợp các chức năng của riêng bạn với các mối quan hệ
Nếu bạn muốn nhận các mô hình được kết nối, bạn sử dụng cú pháp tiêu chuẩn để gọi chúng:
b45e29b9125c2ab565b5526442437686
Nếu bây giờ bạn thêm logic nghiệp vụ của riêng mình, bạn muốn sử dụng ký hiệu chữ hoa camel (thấp hơn):
b45e29b9125c2ab565b5526442437686
Chúng tôi muốn chuẩn hóa cú pháp của cả hai biến thể. Để làm điều này, chúng tôi thêm phương thức ma thuật __call vào ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Cuộc gọi này do đó cũng có thể trong ví dụ trên:
b45e29b9125c2ab565b5526442437686
Kiểm tra các đối tượng trống
Nếu bạn muốn xuất tên quốc gia thành địa chỉ của một người, bạn sẽ thường thấy mã sau:
b45e29b9125c2ab565b5526442437686
Để ngăn chặn điều này, chúng tôi bao gồm thư viện stringhelper và trả về một đối tượng đặc biệt của lớp trống rỗng nếu không tìm thấy mô hình:
b45e29b9125c2ab565b5526442437686
Điều này cũng làm cho cuộc gọi thành công (trong ví dụ này, nếu thứ gì đó được tìm thấy, tên của quốc gia sẽ được xuất ra, trong tất cả các trường hợp khác là một chuỗi trống).
b45e29b9125c2ab565b5526442437686
Nếu chúng tôi cũng muốn đề cập đến trường hợp người dùng có ID 42 thậm chí có thể không tồn tại, chúng tôi cũng sẽ xây dựng một chức năng trợ giúp nhỏ cho việc này:
b45e29b9125c2ab565b5526442437686
Do đó, lệnh gọi sau cung cấp một chuỗi trống ngay cả khi người dùng hoàn toàn không tồn tại:
b45e29b9125c2ab565b5526442437686
Thuận tiện đi qua các quan hệ n: m
Cuối cùng, chúng tôi muốn đơn giản hóa đoạn mã sau:
b45e29b9125c2ab565b5526442437686
Đối với điều này, chúng tôi sử dụng khả năng của các bộ sưu tập tùy chỉnh . Đầu tiên chúng tôi mở rộng mô hình tiện lợi:
b45e29b9125c2ab565b5526442437686
Sau đó, chúng tôi tạo tệp app \ Helpers \ ConvenienceCollection.php , đảm bảo rằng việc gọi các hàm không xác định trong bộ sưu tập sẽ thực thi chức năng cho tất cả các mục trong bộ sưu tập:
b45e29b9125c2ab565b5526442437686
Vì vậy, chúng tôi có thể sử dụng mã sau để xuất ra tất cả các tên của tất cả các quốc gia, tất cả các địa chỉ của tất cả cha mẹ của người đó:
b45e29b9125c2ab565b5526442437686
Nhưng các cuộc gọi như sau cũng có thể:
b45e29b9125c2ab565b5526442437686
Sắp xếp theo nhiều cột
Cuộc gọi sau chỉ sắp xếp theo vị trí , mặc dù đó có thể không phải là điều bạn muốn:
b45e29b9125c2ab565b5526442437686
Để cho phép sắp xếp theo một số cột, chúng tôi đang mở rộng Bộ sưu tập Tiện lợi của mình:
b45e29b9125c2ab565b5526442437686
Với điều đó, chúng tôi có thể sắp xếp bộ sưu tập theo một số cột với:
b45e29b9125c2ab565b5526442437686
Phân loại tiêu chuẩn
Chúng tôi đang mở rộng Bộ sưu tập ConvenienceCollection với một chức năng phụ trợ khác:
b45e29b9125c2ab565b5526442437686
Bây giờ bạn có thể cung cấp cho mỗi mô hình một chức năng sắp xếp tiêu chuẩn riêng lẻ:
b45e29b9125c2ab565b5526442437686
Với điều này, chúng tôi có thể sắp xếp một bộ sưu tập với:
b45e29b9125c2ab565b5526442437686
Tên đối tượng
Mỗi mô hình triển khai phương thức getLabel (getName khác nhau tùy thuộc vào mô hình):
b45e29b9125c2ab565b5526442437686
Với điều này, bạn có thể nhanh chóng và dễ dàng hiển thị tên của một đối tượng. Sau đó, bạn có thể triển khai phương thức trình trợ giúp sortByLabel trong ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Kết quả trống
Nếu một bước trung gian trống, các hàm Laravel first () và last () thường trả về 0. Do đó, chúng tôi giới thiệu getFirst () và getLast () để cuộc gọi sau luôn thành công:
b45e29b9125c2ab565b5526442437686
Với điều này, chúng tôi gửi lại __empty_helper mà __x nhận ra:
b45e29b9125c2ab565b5526442437686