Laravel 5.1 文档攻略 —— Eloquent Collection
简介
像all()和get(),还有一些处理模型关系这种会返回多条数据的方法,在Eloquent里面会返回一个collection对象集合(对象装在对象里),而不是像DQB的数组结果集合(对象装在数组里)。Collection其实前面已经讲过了,它是在数据查询出来后,提供了一系列处理数据的方法,非常强大实用。
首先,所有的collection都可以遍历:
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
但是,collection的能力远远不止于此,非常强大,例如:
$users = App\User::all();
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
这段代码把所有非激活状态的用户去除,并把剩余用户的名字列出来;
Collection 方法
请参考官网。
在模型中自定义Collection
主要方法是覆盖newCollection()
方法:
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
}
`
CustomCollection()就是你自定义的一个类;在里面你可以组织返回collection的内容;
目前这个方法只是对Usermodel适用,如果你想对所有适用,可以把覆盖方法放到一个所有模型都继承的基类中去。