Laravel 集合使用技巧
前言
PHP作为弱类型语言,数组非常简单好用,没有像Java、Go语言那么多的限制;而PHP的集合除了简单好用,相比数组支持更强大的功能。
集合
高阶集合方法
集合具有更高阶的可以链式调用的方法,例如 groupBy() , map() 等
下面的例子计算了一个订单中每组产品的价格。
$offer = [
'name' => '订单1',
'lines' => [
['group' => 1, 'price' => 10],
['group' => 1, 'price' => 20],
['group' => 2, 'price' => 30],
['group' => 2, 'price' => 40],
['group' => 3, 'price' => 50],
['group' => 3, 'price' => 60]
]
];
$totalPerGroup = collect($offer->lines)->groupBy('group')->map(fn($group) => $group->sum('price'));
不要在集合中使用 NULL 过滤
我们可以在 Eloquent 中使用 NULL 过滤,但是不能用 NULL 过滤 集合
需要换成空字符串过滤,字段中已经没有 "null"。
原理是全字符串的形式的过滤不能使用 NULL,因为会被格式化为 ["field is null", "=", true]
// ORM 这样查询没问题
$products = Product::where('purchase_at is null')->get();
// 这将不会按预期返回,只会返回 0 条
$products = Product::all();
$unpurchase_products = $products->where('purchase_at is null')->count();
// 可以改成这样
$unpurchase_products = $products->where('purchase_at', '')->count();
使用自定义的回调函数对集合分组
如果我们想对结果分组,且分组字段不对应数据库中的字段
我们可以提供一个回调函数来返回自定义的分组字段。
例如,通过用户的注册日分组,代码如下:
$users = User::all()->groupBy(function($item) {
return $item->created_at->format('Y-m-d');
});
⚠️ 注意:这个方法是在 Collection 类上的,所以将会在数据库的返回结果上执行。(意思不会在数据库 sql 层面分组)
针对行的集合方法
可以用 ->all() , ->get() 方法查询数据,然后在这个返回的集合上执行各种集合方法,执行集合操作不会每次都查询数据库。
$users = User::all();
echo 'Max ID: ' . $users->max('id');
echo 'Average age: ' . $users->avg('age');
echo 'Total budget: ' . $users->sum('budget');
对分页集合求和
如何对分页返回的结果集求和?使用相同的查询构建器,在分页查询之前执行求和操作。
// 如何通过分页集合获取 post_views 的总和?
$posts = Post::paginate(10);
// 这里的求和只是当前页的,不是总的
$sum = $posts->sum('post_views');
// 使用查询构建器
$query = Post::query();
// 计算总和
$sum = $query->sum('post_views');
// 然后使用相同的查询构建器获取分页数据
$posts = $query->paginate(10);
分页组件中的唯一标识
我们可以在分页组件中像序列号那样使用每趟循环中的索引 index ,作为分页组件的唯一标识。
...
<th>连续的</th>
...
@foreach ($products as $product)
<tr>
<td>{{ $loop->index $product->firstItem() }}</td>
...
@endforeach
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanfbbbg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01