Laravel Eloquent thật tuyệt vời - có lẽ mình không cần phải nói với các bạn về điều đó nữa . Những gì ít được biết đến là danh sách các phương thức để làm việc với Eloquent Collections. Bạn có thể lọc, cắt, chỉnh sửa dữ liệu một cách dễ dàng v.v. Nhưng hãy xem từng phương thức một. Có một lưu ý nhỏ ở đây - Collections là một thuật ngữ rộng hơn, trong khi Eloquent Collections là việc triển khai của các thứ có sẵn trong Collections này. Vì vậy, mọi thứ mình đề cập ở đây trong bài viết này đều có thể được sử dụng cho cả hai trường hợp. Ví dụ, bạn có mã Laravel như sau:

$books = Book::where('release_year', 2015)->get();

Trong trường hợp này, `$books` là một collection, đó là một mảng với các thuộc tính. Ví dụ, nó có thể nhìn như thế này: 

[
    ['title' => 'Lean Startup', 'price' => 10],
    ['title' => 'The One Thing', 'price' => 15],
    ['title' => 'Laravel: Code Bright', 'price' => 20],
    ['title' => 'The 4-Hour Work Week', 'price' => 5],
]

Vậy chúng ta có thể làm gì với dữ liệu như trên ? Lưu ý quan trọng: tất cả các hàm dưới đây được gọi mà không truy vấn cơ sở dữ liệu - vì vậy bạn chỉ cần thực hiện truy vấn một lần và sau đó thực hiện tất cả các hành động với collection "offline" (tự khởi tạo dữ liệu). 

avg() - Nếu bạn muốn tính giá trung bình của sách, bạn không cần truy vấn cơ sở dữ liệu riêng cho điều đó.

$average_price = $books->avg('price'); // in our case, 12.5

chunk() - Nếu bạn muốn chia kết quả thành các phần bằng nhau, ví dụ như để xem chúng dưới dạng cột, thì có thể nhìn như thế này:

$chunks = $books->chunk(2);
$chunks->toArray();

Và kết quả là:

[
[
    ['title' => 'Lean Startup', 'price' => 10],
    ['title' => 'The One Thing', 'price' => 15]
],
[
    ['title' => 'Laravel: Code Bright', 'price' => 20],
    ['title' => 'The 4-Hour Work Week', 'price' => 5],
]
]

contains() - Kiểm tra xem collection của chúng ta có chứa một giá trị nhất định trong một trong các trường không:

$books->contains('title', 'The One Thing'); // TRUE
$books->contains('title', 'The Second Thing'); // FALSE

every() - Một phương pháp khác để chia collection thành các cột khác nhau. Lần này - every() sẽ tạo ra một collection mới, bao gồm mỗi phần tử thứ N.

$books->every(2); // every 2nd element

Và kết quả là:

[
    ['title' => 'Lean Startup', 'price' => 10],
    ['title' => 'Laravel: Code Bright', 'price' => 20],
]

 

filter() - Cái tên đã nói lên tất cả, nó dùng để filter theo một điều kiện cụ thể

$expensive_books = $books->filter(function ($book) {
    return $book->price > 10;
});

forget() - Đây là một phương pháp để sử dụng nếu bạn muốn loại bỏ một trong các cột.

$books->forget('price');

Và kết quả là:

[
    ['title' => 'Lean Startup'],
    ['title' => 'The One Thing'],
    ['title' => 'Laravel: Code Bright'],
    ['title' => 'The 4-Hour Work Week'],
]

implode() - Rất tương tự với hàm implode() trong PHP. Kết quả là một chuỗi được ghép nối:

$books->implode('title', ', ');

Và kết quả là:

'Lean Startup, The One Thing, Laravel: Code Bright, The 4-Hour Work Week'

keyBy() - Đây là một method rất hữu ích để sử dụng với vòng lặp foreach sau này. Cơ bản, nó biến đổi một collection thành một mảng với khóa bạn đã chọn.

$by_key = $books->keyBy('title');
$by_key->all();

Và kết quả là:

[
    'Lean Startup' => ['title' => 'Lean Startup', 'price' => 10],
    'The One Thing' => ['title' => 'The One Thing', 'price' => 15],
    'Laravel: Code Bright' => ['title' => 'Laravel: Code Bright', 'price' => 20],
    'The 4-Hour Work Week' => ['title' => 'The 4-Hour Work Week', 'price' => 5],
]

map() - Nếu bạn muốn trích xuất một số giá trị và thực hiện một số hành động với chúng - không chỉ có foreach ().

$discounted_books = $books->map(function ($item) {
    return ['title' => $item->title, 'price' => $item->price / 2];
});

Và kết quả là:

[
    ['title' => 'Lean Startup', 'price' => 5],
    ['title' => 'The One Thing', 'price' => 7.5],
    ['title' => 'Laravel: Code Bright', 'price' => 10],
    ['title' => 'The 4-Hour Work Week', 'price' => 2.5],
]

pluck() - Phương thức này cho phép bạn dễ dàng trích xuất chỉ một cột.

$prices = $books->pluck('price');
$plucked->all();

Và kết quả là:

[10, 15, 20, 5]

Trên đây là 10 methods rất tuyệt vời của Laravel Collection, nhưng đó chưa phải tất cả. Bạn có thể tìm thấy danh sách đầy đủ với các ví dụ ngắn gọn trong tài liệu chính thức cho Eloquent CollectionsBasic Collections. Hãy tiếp tục đào sâu vào thế giới Laravel nhé các bạn.

Nguồnlaraveldaily.com




Các thành viên đã like bài viết: