减少 Laravel 中的查询

强硬派

我无法为自己找到解决方案的快速问题,也无法通过谷歌搜索。

在我的仪表板视图中,我会显示我的付款计划,只需执行操作$plans = Plan::all()并将其返回到视图中即可。那里没什么好看的。但是,在我的实际仪表板视图中,我想显示已完成交易的总金额(以美元计)。所以在我看来,我做了以下(剥离的例子):

@foreach($plans as $plan)
    {{ $plan->paidAmount() }}
@endforeach

这是使用我的模型中的以下方法:

private function paidAmount()
{
    return $this->transactions->sum('amount');
}

这基本上只是获取与该计划相关的所有交易的总金额,并将其显示在页面上。但是,这会为我的每个计划生成一个新查询。假设我有 5 个计划,它将为我需要显示的每个金额生成 5 个额外的查询。

我想显示的剩余金额也是如此:

private function paidAmount()
{
    return $this->amount - $this->paidAmount();
}

这将生成额外的 5 个查询。因此,对于我在其中显示一些信息的简单表,正在执行多达 11 个查询。

有什么方法可以在我的原始查询中包含paidAmountremainingAmount我知道应该有办法,只是我还没找到。所以只是一些类似的东西:

$plans = Plan::with('paidAmount')->get();
罗希特·达拉尔

您可以像这样在主查询中使用子查询来计算总和

像这样 -

$plans = Plan::all('*', DB::RAW("(SELECT SUM(amount) FROM transactions WHERE plan_id=plans.id ) as amount") );

这样你在视图中渲染时就已经有了 sum

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章