如何在laravel中计算两列的总和以及关联关系的数量?
P粉788571316
P粉788571316 2024-02-21 11:59:52
0
2
478

我有两个表:买家和订单。买家有很多订单。

我想要所有买家以及特定时间段内订单数和两列订单(价格、费用)的总和。我可以通过执行以下操作来获取计数,

Buyer::withCount([
    'orders' => fn ($query) => $query
        ->where('created_at', '>=', $dateTo)
])
->get();

但是如何获得指定时间段的总和(->where('created_at', '>=', $dateTo))?

P粉788571316
P粉788571316

全部回复(2)
P粉567112391

以同样的方式,你有 withSum() a>,这是您可以做到的方法

Buyer::withCount([
            'orders' => fn($query) => $query->where('created_at', '>=', $dateTo),
        ])->withSum([
            'orders' => fn($query) => $query->where('created_at', '>=', $dateTo),
        ], 'price')->withSum([
            'orders' => fn($query) => $query->where('created_at', '>=', $dateTo),
        ], 'charge')->get();
P粉189606269

要在闭包内使用变量,您需要使用 use() 将其值发送到该函数。

用于使用 withSum({relation},{column}) 你需要为每个单独调用。

Buyer::withCount([
        'orders' => function ($query) use ($dateTo) { 
            $query->where('created_at', '>=', $dateTo);
        }
    ])
    ->withSum([
        'orders' => function ($query) use ($dateTo) { 
            $query->where('created_at', '>=', $dateTo);
        }
    ], 'price')
    ->withSum([
        'orders' => function ($query) use ($dateTo) { 
            $query->where('created_at', '>=', $dateTo);
        }
    ], 'charge')
    ->get();

withSum() 仅在 Laravel 版本 8 或更高版本中可用。

编辑箭头函数语法

Buyer::withCount([
        'orders' => fn ($query) $query->where('created_at', '>=', $dateTo),
    ])
    ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'price')
    ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'charge')
    ->get();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!