Bắt đầu từ v5. 4. 12, Bộ sưu tập của Laravel hiện bao gồm một phương thức when
cho phép bạn thực hiện các hành động có điều kiện trên các mục mà không phá vỡ chuỗi
Giống như tất cả các phương thức Bộ sưu tập khác của Laravel, phương thức này có thể có nhiều trường hợp sử dụng nhưng một ví dụ mà tôi nghĩ đến là có thể lọc dựa trên tham số chuỗi truy vấn
Để chứng minh ví dụ đó, giả sử chúng ta có một danh sách các máy chủ từ Laravel News Podcast
1$hosts = [
2 ['name' => 'Eric Barnes', 'location' => 'USA', 'is_active' => 0],
3 ['name' => 'Jack Fruh', 'location' => 'USA', 'is_active' => 0],
4 ['name' => 'Jacob Bennett', 'location' => 'USA', 'is_active' => 1],
5 ['name' => 'Michael Dyrynda', 'location' => 'AU', 'is_active' => 1],
6];
Trước đây để lọc dựa trên chuỗi truy vấn, bạn có thể làm như thế này
1$inUsa = collect[$hosts]->where['location', 'USA'];
2
3if [request['retired']] {
4 $inUsa = $inUsa->filter[function[$employee]{
5 return ! $employee['is_active'];
6 }];
7}
Với phương thức when
mới, giờ đây bạn có thể thực hiện tất cả điều này trong một chuỗi Bộ sưu tập
1$inUsa = collect[$hosts]
2 ->where['location', 'USA']
3 ->when[request['retired'], function[$collection] {
4 return $collection->reject[function[$employee]{
5 return $employee['is_active'];
6 }];
7 }];
nộp trong
hướng dẫn
Eric L. Barnes
Eric là người tạo ra Laravel News và đã đưa tin về Laravel từ năm 2012
Đối tác tin tức của Laravel
Đối tác tin tức của Laravel
Laravel Collections là một trong những tính năng mạnh mẽ nhất của Laravel. Về cơ bản, các bộ sưu tập là các mảng PHP nhưng đó là cách tiếp cận Hướng đối tượng để xử lý các mảng PHP
xem toàn bộ loạt- Laravel Collections – Giới thiệu về Collections
- Bộ sưu tập Laravel – phương thức tạo
- Bộ sưu tập Laravel – Các phương thức quấn[] và unwrap[]
- Bộ sưu tập Laravel – phương thức map[]
- Bộ sưu tập Laravel – phương thức times[]
- Bộ sưu tập Laravel – Phương thức sụp đổ []
- Bộ sưu tập của Laravel – Phương thức chứa [] & containsStrict []
- Bộ sưu tập Laravel – Phương thức each[]
- Laravel Collection – Sử dụng Phương thức toJson[]
- Bộ sưu tập Laravel – Lọc các mục Bộ sưu tập bằng cách sử dụng where[]
- Laravel Collection – Sử dụng phương thức splice[] để xóa các mục
Laravel Collection cung cấp một trình bao bọc trôi chảy, thuận tiện để làm việc với mảng. Trong bài đăng này, chúng ta sẽ tìm hiểu về phương pháp each[] method
để lặp qua và thực hiện một số mục hành động trong bộ sưu tập
Lớp Illuminate\Support\Collection cung cấp một trình bao bọc thông thạo, thuận tiện để làm việc với các mảng dữ liệu
mỗi [] Phương pháp
Phương thức each[]
của Bộ sưu tập Laravel nhận chức năng gọi lại và thực hiện nó trên từng mục của bộ sưu tập. Nếu hàm gọi lại trả về
1$inUsa = collect[$hosts]->where['location', 'USA'];
2
3if [request['retired']] {
4 $inUsa = $inUsa->filter[function[$employee]{
5 return ! $employee['is_active'];
6 }];
7}
0, thì phương thức each[]
sẽ ngắt vòng lặp của nó và trả về tham chiếu cho bộ sưu tập ban đầu. Trong hàm gọi lại, chúng tôi xác định cả tham số 1$inUsa = collect[$hosts]->where['location', 'USA'];
2
3if [request['retired']] {
4 $inUsa = $inUsa->filter[function[$employee]{
5 return ! $employee['is_active'];
6 }];
7}
2 và 1$inUsa = collect[$hosts]->where['location', 'USA'];
2
3if [request['retired']] {
4 $inUsa = $inUsa->filter[function[$employee]{
5 return ! $employee['is_active'];
6 }];
7}
3Mỗi phương thức của Bộ sưu tập của Laravel giống hệt với PHP gốc cho mỗi vòng lặp
Chữ ký
Chữ ký của phương thức each[] trong lớp
1$inUsa = collect[$hosts]->where['location', 'USA'];
2
3if [request['retired']] {
4 $inUsa = $inUsa->filter[function[$employee]{
5 return ! $employee['is_active'];
6 }];
7}
4 trông giống như bên dưới/** * Execute a callback over each item. * * @param callable $callback * @return $this */ public function each[callable $callback] { // }
Thí dụ
Đây là một ví dụ rất cơ bản của phương thức each[]
, trong đó chúng ta sẽ lặp lại và in tên của các thành phố
use Illuminate\Support\Collection; $cities = new Collection[[ 'London', 'Paris', 'New York', 'Toranto', 'Tokyo' ]]; $cities->each[function[$item, $key] { // Print each city name echo $item; }];
Nếu bạn muốn ngắt vòng lặp với một điều kiện nhất định, bạn có thể thực hiện như bên dưới
$cities->each[function[$item, $key] { if [$item == 'Paris'] { return false; } echo $item; }];
Ví dụ mã trên, sẽ chỉ in “London”
Laravel Eloquent trả về kết quả dưới dạng Laravel Collection, vì vậy chúng ta có thể sử dụng phương thức này để lặp lại kết quả, thay vì sử dụng vòng lặp foreach gốc của PHP