sql - 如何在 laravel 的 HASMANY 关系中使用 WHERE 生成 SUM()?任何帮助表示赞赏
问题描述
晚上好,朋友们,我很难SUM
从HASMANY
有条件的关系中获得帮助。
我试图做这样的事情:
$marketPlaces = ModelAccountMarketplace::with(['orders'])
->whereHas('orders', function ($query) use ($dates) {
$query->selectRaw('SUM(valor_frete) as somaFreteGratis')
->whereBetween('datetime', [$dates['dateStart'], $dates['dateEnd']]);
});
但是当我尝试通过以下方式获得价值时:var_dump($marketPlace->somaFreteGratis);
我得到一个null
值。我试着把 where 放在里面WITH()
:
$marketPlaces = ModelAccountMarketplace::with(['orders' => function ($query) {
$query->selectRaw('SUM(valor_frete) as somaFreteGratis')->where('tipo_frete', 'gratis');
}])
->whereHas('orders', function ($query) use ($dates) {
$query->whereBetween('datetime', [$dates['dateStart'], $dates['dateEnd']]);
});
但是在每次尝试中,当我检查时都会得到一个空值:
<?= var_dump($marketPlace->somaFreteGratis); ?>
任何帮助,将不胜感激。
解决方案
您尝试做的事情可以使用 awithCount
和 a来完成Closure
$marketPlaces = ModelAccountMarketplace::withCount([
'orders as somaFreteGratis' => function ($query) use ($dates) {
$query->select(DB::raw('sum(valor_frete)')
->where('tipo_frete', 'gratis')
->whereBetween('datetime', [$dates['dateStart'], $dates['dateEnd']]);
}
])
->get();