laravel模型集合常用方法

map

代码

    $query = DB::table('commodity');
    return $query->select("name")->get();

原始数据

在这里插入图片描述

需求

将name改为value

更改后的代码

    $query = DB::table('commodity');
    return $query->get()->map(function($item){return ['value'=>$item->name];});

得到的数据

得到的数据

unique

在检查项目值时 unique 方法使用的是「宽松」比较,意味着具有整数值的字符串将被视为等于相同值的整数。

使用

传入参数

如果传入参数,那对于键值对数据,就会以传入的参数作为键,查询值是否一致,一致则剔除

    $r['data'] = DB::table('user')->orderByDesc('id')->limit(3)
    ->select('id','username')->get();
    $r['unique'] = $r['data']->unique('username');
    return $r;
```json
 {
    "data": [
			{"id":40,"username":"rollback"}
			{"id":39,"username":"rollback"}
			{"id":20,"username":"ddd"}
    ],
    "unique": {	
        "0": {
            "id": 40,
            "username": "rollback"
        },
        "2": {
            "id": 20,
            "username": "ddd"
        }
    }
}
使用回调函数判定是否一致

会根据返回值查询是否已有,已有则剔除

    $collection = DB::table('commodity')->select("name","price")->limit(4)->get();
    $result['origin'] = $collection;
    $result['unique'] = $collection->unique(function($item){
        return 1;
    });
    return $result;
"origin": [
        {"name":"文具2","price":"fsd"}
		{"name":"afasfdas","price":"fsdfas"}
		{"name":"文具1","price":"fsdfas"}
		{"name":"afasfdas","price":"fsdfas"}
    ],
    "unique": [{"name":"文具2","price":"fsd"}]

有时会自动在数据前面加一个数字作为键,这可能会引发bug,可以用values方法去除。
    $collection = DB::table('commodity')->select("name","price")->limit(5)->get();
    $result['origin'] = $collection;
    $result['unique'] = $collection->unique();
    $result['origin-4'] =$collection =  $collection->slice(0,4);
    $result['unique-4'] = $collection->unique();
{
    "data": [
			{"id":40,"username":"rollback"}
			{"id":39,"username":"rollback"}
			{"id":20,"username":"ddd"}
    ],
    "unique": {
        "0": {
            "id": 40,
            "username": "rollback"
        },
        "2": {
            "id": 20,
            "username": "ddd"
        }
    },
    "unique-values": [
        {
            "id": 40,
            "username": "rollback"
        },
        {
            "id": 20,
            "username": "ddd"
        }
    ]
}

pluck

pluck筛选出给定键对应的值,第二个参数为原集合的键,其值会成为新元素的键。
实现需求,仅筛选出i集合中的id,id对应的键是username

    $r['data'] = DB::table('user')->select()->orderByDesc('id')->limit(4)
    ->select('id','username')->get();
    $r['pluck-name'] = $r['data']->pluck('id');
    $r['pluck-username-id'] = $r['data']->pluck('id','username');
    return $r;
{
    "data": [
        {"id": 40, "username": "rollback" },
        {"id": 39, "username": "rollback"},
        {"id": 20, "username": "ddd" },
        {"id": 10,"username": "zhang123"}
    ],
    "pluck-name": [40,39,20,10],
    "pluck-username-id": {
        "rollback": 39,
        "ddd": 20,
        "zhang123": 10
    }
}

keyBy

更改集合的键,可用集中中某个键的值,也可以传入回调函数自己设定,用于更改数据的键名

    $r['data'] = DB::table('user')->orderByDesc('id')->limit(3)
    ->select('id','username')->get();
    $r['keyBy-username'] = $r['data']->keyBy('username');
    $r['ksyBy-id:username'] = $r['data']->keyBy(function($item){
        return $item->id.':'.$item->username;
    });
    return $r;
{
    "data": [{"id":40,"username":"rollback"}
			 {"id":39,"username":"rollback"}
		     {"id":20,"username":"ddd"}],
    "keyBy-username": {
        "rollback": {
            "id": 39,
            "username": "rollback"
        },
        "ddd": {
            "id": 20,
            "username": "ddd"
        }
    },
    "ksyBy-id:username": {
        "40:rollback": {
            "id": 40,
            "username": "rollback"
        },
        "39:rollback": {
            "id": 39,
            "username": "rollback"
        },
        "20:ddd": {
            "id": 20,
            "username": "ddd"
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值