Làm cách nào để lọc trong bộ sưu tập laravel?

Sau đây, chúng ta sẽ tìm hiểu cách sử dụng phương thức lọc bộ sưu tập trong ứng dụng laravel. tôi muốn cung cấp cho bạn các ví dụ đơn giản về phương pháp lọc bộ sưu tập của laravel. chúng tôi sẽ sử dụng phương pháp lọc bộ sưu tập theo khóa, theo giá trị và loại bỏ các giá trị rỗng và rỗng. chúng ta có thể dễ dàng sử dụng với ứng dụng laravel 5, laravel 6, laravel 7, laravel 8 và laravel 9

Đối tượng Bộ sưu tập của Laravel cung cấp một số phương thức sẽ giúp viết logic của riêng bạn. ở đây chúng ta sẽ tìm hiểu cách sử dụng phương thức lọc của bộ sưu tập laravel

Trong ví dụ này, tôi sẽ cung cấp cho bạn hai ví dụ một với đối tượng tập hợp mảng đa chiều với bộ lọc thông qua sinh viên. Một ví dụ khác chúng tôi là ví dụ đơn giản sẽ giúp bạn loại bỏ giá trị mảng rỗng, trống, trống khỏi đối tượng bộ sưu tập

Nếu bạn sử dụng Laravel, rất có thể, bạn có thể sử dụng Bộ sưu tập hàng ngày. Như được mô tả trên trang web Laravel, Collection là một lớp "cung cấp một trình bao bọc thuận tiện, trôi chảy để làm việc với các mảng dữ liệu". Chúng có thể cực kỳ hữu ích và khi được sử dụng đúng cách, chúng có thể làm cho những thứ như lặp mảng và thao tác [thêm/xóa/cập nhật mục] trở nên dễ đọc và làm việc hơn nhiều

Nếu bạn không quen thuộc với Bộ sưu tập, tôi thực sự khuyên bạn nên đọc về chúng trên tài liệu chính thức của Laravel tại đây

Cách sử dụng phương thức whereInstanceOf[]

Một phương pháp mà tôi thấy đặc biệt hữu ích gần đây khi làm việc trong một dự án là phương pháp

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

6. Không đi sâu vào quá nhiều chi tiết [và làm bạn nhàm chán với logic nghiệp vụ], tôi cần lọc Bộ sưu tập dựa trên loại lớp. Bộ sưu tập chứa các vật phẩm thuộc 3 loại mô hình khác nhau [
        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

7,
        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

8,
        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

9]

Để cho bạn thấy cách tôi lọc Bộ sưu tập, đây là một ví dụ cực kỳ đơn giản bên dưới. Phương thức

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

0 thực hiện một số truy vấn và logic trả về Bộ sưu tập các bài đăng, video và hình ảnh

        

6$collection = $this->getItems[];

8$posts = $collection->whereInstanceOf[Post::class];

Trong ví dụ trên, biến

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

1 bây giờ sẽ là Bộ sưu tập chỉ chứa các mô hình
        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

7

Lọc trên nhiều lớp

Như bạn có thể tưởng tượng, đôi khi sử dụng bộ lọc này có thể thực sự hữu ích. Nhưng cũng có thể đôi khi bạn muốn lọc bộ sưu tập bằng nhiều lớp

Chẳng hạn, trong ví dụ của tôi ở trên, tôi có thể cần lọc Bộ sưu tập để có thể lấy tất cả video và hình ảnh. Trước Laravel 8. 29, bạn sẽ phải sử dụng phương pháp

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

0, như đã thấy trong ví dụ bên dưới

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

Mặc dù mã này hoạt động và khá rõ ràng, nhưng nó vẫn có thể được đơn giản hóa hơn nữa để giúp việc đọc dễ dàng hơn

Vì vậy, tôi đã thực hiện một yêu cầu kéo để thêm chức năng vào kho lưu trữ

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

1 trên GitHub để thử và mở rộng chức năng của Bộ sưu tập để lọc dựa trên nhiều lớp

Bây giờ, kể từ Laravel 8. 29, bạn có thể truyền một chuỗi hoặc một mảng vào phương thức

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

6

Để xem cách chúng tôi có thể cập nhật ví dụ ở trên để sử dụng chức năng này, chúng tôi có thể cập nhật mã của mình thành mã này

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->whereInstanceOf[[Video::class, Image::class]];

Vì tôi chắc chắn rằng bạn sẽ đồng ý, điều này có vẻ dễ đọc và diễn giải hơn nhiều so với ví dụ trước. Những thay đổi nhỏ về cú pháp như thế này [theo ý kiến ​​của tôi] luôn tốt vì nó giúp làm cho mã của bạn đơn giản và thú vị khi làm việc với

Phương pháp

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

4 cho phép người dùng lọc các mục trong bộ sưu tập được cung cấp một cặp khóa-giá trị. Phương pháp này lọc các mục bằng cách kiểm tra xem
        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

5 có một số giá trị bằng với cung cấp
        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

6

Bạn cũng có thể truyền tham số để kiểm soát cách phương thức so sánh

        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

5 với
        

6$collection = $this->getItems[];

8$videosAndImages = $collection->filter[function [$value] {

9 if [$value instanceof Video::class || $value instanceof Image::class] {

6. Laravel chạy lệnh đã cho và trả về một tập hợp các phiên bản mới chứa các mục đã lọc thỏa mãn điều kiện

Cấu trúc của where[]

Lớp

Chủ Đề