codecamp

集合

所有 Eloquent 查询返回的数据,如果结果多于一条,不管是经由 get 方法或是 relationship,都会转换成集合对象返回。这个对象实现了 IteratorAggregate PHP 接口,所以可以像数组一般进行遍历。而集合对象本身还拥有很多有用的方法可以操作模型数据。
确认集合中里是否包含特定键值

例如,我们可以使用 contains 方法,确认结果数据中,是否包含主键为特定值的对象。

$roles = User::find(1)->roles;
if ($roles->contains(2))
{
    //
}

集合也可以转换成数组或 JSON:

$roles = User::find(1)->roles->toArray();
$roles = User::find(1)->roles->toJson();

如果集合被转换成字符串类型,会返回 JSON 格式:

$roles = (string) User::find(1)->roles;

集合遍历

Eloquent 集合里包含了一些有用的方法可以进行循环或是进行过滤:

$roles = $user->roles->each(function($role)
{
    //
});

集合过滤

过滤集合时,回调函数的使用方式和 array_filter 里一样。

$users = $users->filter(function($user)
{
    return $user->isAdmin();
});

注意: 如果要在过滤集合之后转成 JSON,转换之前先调用 values 方法重设数组的键值。

遍历传入集合里的每个对象到回调函数

$roles = User::find(1)->roles;
$roles->each(function($role)
{
    //
});

依照属性值排序

$roles = $roles->sortBy(function($role)
{
    return $role->created_at;
});

依照属性值排序

$roles = $roles->sortBy('created_at');

返回自定义的集合对象

有时您可能想要返回自定义的集合对象,让您可以在集合类里加入想要的方法。可以在 Eloquent 模型类里重写 newCollection 方法:

class User extends Model {
    public function newCollection(array $models = [])
    {
        return new CustomCollection($models);
    }
}
使用枢纽表
获取器和修改器
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

环境配置

系统服务

哈希

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }