Mục lục
Mục lục này tương ứng với mục lục trên trang chủ của Laravel.
-
Mở đầu
- Release Notes
- Upgrade Guide
- Contribution Guide
- API Documentation
-
Thiết lập
-
Hướng dẫn
-
Cơ bản
- Routing
- Middleware
- Controllers
- Requests
- Responses
- Views
- Blade Templates
-
Nền tảng kiến trúc
-
Services
- Authentication
- Authorization
- Artisan Console
- Billing
- Cache
- Collections
- Elixir
- Encryption
- Errors & Logging
- Events
- Filesystem & Cloud Storage
- Hashing
- Helpers
- Localization
- Package Development
- Pagination
- Queues
- Redis
- Envoy or SSH Tasks
- Task Scheduling
- Testing
- Validation
-
Database
- Getting Started
- Query Builder
- Migrations
- Seeding
-
Eloquent ORM
Eloquent: Collections
Giới thiệu
Tất cả các tập hợp nhiều kết quả bởi Eloquent đều là một instance từ Illuminate\Database\Eloquent\Collection
, bao gồm kết quả lấy từ hàm get
hay thông qua relationship. Các Eloquent collection object kế thừa từ Laravel base collection, nên chúng đề kế thừa các hàm để làm xử lý với lớp dưới của Eloquent model.
Tất nhiên là các collections đều có thể sử dụng như iterators, cho phép bạn thực hiện lặp như với một mảng PHP:
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
Tuy nhiên, collection còn mạnh hơn array nhiều và cung cấp thêm một số các xử lý map / reduce mà có thể móc nối được qua một interface dễ hiểu. Ví dụ, cùng nhau xoá các model inactive và thu thập tên của các user còn lại:
$users = App\User::where('active', 1)->get();
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
Chú ý: Trong khi hầu hết hàm Eloquent collection trả về một instance mới của một Eloquent collection, các hàm
pluck
,keys
,zip
,collapse
,flatten
vàflip
trả về một instance của base collection.
Danh sách các hàm
Base Collection
Tất cả các Eloquent collections đều kế thừa từ Laravel collection, vì thế mà chúng kế thừa tất cả các hàm mạnh mẽ được cung cấp bởi lớp base collection:
Tạo collection riêng
Nếu bạn muốn tạo một object Collection
riêng với hàm mở rộng riêng, bạn có thể ghi đè hàm 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 đã khai báo một hàm newCollection
, bạn sẽ nhận được một instance của collection đó bất cứ khi nào Eloquent trả về một Collection
của model. Nếu bạn muốn sử dụng collection riêng cho tất cả các model trong ứng dụng, bạn nên ghi đè vào hàm newCollection
trong class base của model, mà được kế thừa từ tất cả các model khác.