Giới thiệu

Tất cả các kết quả được trả về từ Eloquent đều là các instance của đối tượng Illuminate\Database\Eloquent\Collection, bao gồm cả kết quả được truy xuất thông qua phương thức get hoặc truy vấn thông qua quan hệ. Đối tượng collection Eloquent được extend từ base collection, do đó, nó thừa hưởng nhiều phương thức có thể được dùng để làm việc dễ dàng hơn với mảng model Eloquent.

Tất cả các collection này cũng có vai trò như là một vòng lặp, cho phép bạn lặp qua nó như thể nó là một mảng PHP đơn thuần:

$users = App\User::where('active', 1)->get();

foreach ($users as $user) {
    echo $user->name;
}

Tuy nhiên, collection mạnh mẽ hơn nhiều so với mảng và có thêm nhiều phương thức như map hoặc reduce, có thể được kết hợp lại với nhau qua một giao diện trực quan. Ví dụ: hãy xóa tất cả những người dùng không hoạt động và lấy ra tên của những người dùng còn lại:

$users = App\User::all();

$names = $users->reject(function ($user) {
    return $user->active === false;
})
->map(function ($user) {
    return $user->name;
});

{note} Trong khi hầu hết các phương thức Eloquent trả về một instance mới của collection Eloquent, thì các phương thức pluck, keys, zip, collapse, flattenflip sẽ trả về một instance base collection. Tương tự, nếu mà phương thức map trả về một collection không chứa bất kỳ model Eloquent nào, thì nó sẽ tự động được chuyển đổi thành một base collection.

Các phương thức có sẵn

The Base Collection

Tất cả các collection Eloquent đều được extend từ đối tượng Laravel collection; do đó, chúng kế thừa tất cả các phương thức mạnh mẽ được cung cấp bởi class collection:

Tuỳ biến Collection

Nếu bạn cần sử dụng một đối tượng Collection tùy biến cho các phương thức dành riêng cho bạn, bạn có thể ghi đè phương thức newCollection trên model của bạn:

<?php

namespace App;

use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Create a new Eloquent Collection instance.
     *
     * @param  array  $models
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public function newCollection(array $models = [])
    {
        return new CustomCollection($models);
    }
}

Khi bạn đã định nghĩa một phương thức newCollection, bạn sẽ nhận lại một instance của collection tùy biến của bạn bất cứ khi nào Eloquent trả về một instance Collection cho model đó. Nếu bạn muốn sử dụng collection tùy biến cho mọi model trong application của bạn, bạn nên ghi đè phương thức newCollection trên một class base model mà được tất cả các model khác extend.

Relationships Mutators
© 2023 by Logo page doc-vn