首页 > 解决方案 > 如何在 laravel 的 HASMANY 关系中使用 WHERE 生成 SUM()?任何帮助表示赞赏

问题描述

晚上好,朋友们,我很难SUMHASMANY有条件的关系中获得帮助。

我试图做这样的事情:

$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); ?>

任何帮助,将不胜感激。

标签: sqllaraveleloquent

解决方案


您尝试做的事情可以使用 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();

推荐阅读