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"
}
}
}