Laravel 5.6

Eloquent: Collections

Eloquent: Collections

Eloquent: Collections

Giới thiệu

Tất cả các kết quả trả về bởi Eloquent đều là instance của object (đối tượng) Illuminate\Database\Eloquent\Collection , bao gồm cả kết  quả được lấy ra bởi phương thức get hoặc được lấy ra từ relationshipEloquent collection object được mở rộng từ Laravel base collection , vì vậy nó thừa hưởng hầu hết các phương thức được sử dụng để có thể làm việc với mảng của Eloquent model

Tất nhiên, tất cả các collection cũng đóng vai trò là các trình vòng lặp, cho phép bạn dùng chúng như là các mảng PHP đơn giản:

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

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

Tuy nhiên, các collection mạnh hơn nhiều so với mảng, nó phơi bày cho ta 1 đa dạng map hoặc giảm thiểu các operation một cách trực quan. Ví dụ: hãy xóa tất cả các model  và thu thập tên đầu tiên cho mỗi 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;
});
Trong khi hầu hết các phương thức Eloquent collection trả về cho ta 1 new instance của Eloquent collection, thì các phương thức pluckkeyszipcollapseflattenflip trả về 1  instance base collection . Tương tự như vậy, nếu map trả về 1 collection không chứa bất kì model Eloquent nào, nó sẽ tự động chuyển sang collection cơ bản

Các Phương thức trong collection (Available Methods)

Collection cơ bản (The Base Collection)

Toàn bộ các collection Eloquent được dựa trên Laravel collection object, vì vậy, chúng kế thừa toàn bộ các phương thức được cung cấp bởi lớp base collection này:

Custom Collections

Bạn có thể override phương thức newCollection trong model:

<?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 đã xác định được phương thức newCollection, bạn nhận về 1 phiên bản của collection chỉnh sửa bất cứ khi nào Eloquent trả về Collection của model. Nếu bạn muốn sử dụng custome collection cho toàn bộ các model trong ứng dụng, bạn nên override newCollection vào base model class nơi các được extend bởi toàn bộ các model


Tags

Leave a Reply

Your email address will not be published. Required fields are marked *

Close