Laravel 集合使用技巧

简介: 集合具有更高阶的可以链式调用的方法,例如 groupBy() , map() 等

集合


高阶集合方法


集合具有更高阶的可以链式调用的方法,例如 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


相关文章
|
Go PHP
Laravel 必知必会的 Collection
Laravel 必知必会的 Collection
104 0
|
7月前
|
测试技术 API 数据处理
深入解析 Laravel 中的集合(Collections)
【8月更文挑战第31天】
216 0
|
PHP Apache
laravel日常操作
1、创建user表 php artisan make:migration create_users_table --create=users 2、创建控制器(同时创建model) php artisan make:controller PhotoCo...
1028 0
|
7月前
|
前端开发 JavaScript 安全
|
PHP
【laravel】@15 查询构建器(1)
【laravel】@15 查询构建器
105 0
【laravel】@15 查询构建器(1)
|
PHP
【laravel】@15 查询构建器(2)
【laravel】@15 查询构建器
149 0
【laravel】@15 查询构建器(2)
|
网络安全 前端开发
|
存储 Java 编译器
集合与框架
集合与框架
129 0
集合与框架
|
缓存 前端开发 中间件
laravel记录
1.使用数据库事务的时候需要传递参数,使用了use关键字,否则的话传递不进去,代码如下: public function postVote(Request $request){ $data = $request->all(); $count = DB...
1228 0
|
前端开发 中间件 PHP