减少laravel中的查询

时间:2017-06-27 12:42:39

标签: php laravel

我无法为自己找到解决方案的快速问题,也无法使用Google搜索。

在我的信息中心视图中,我只需执行$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();

1 个答案:

答案 0 :(得分:2)

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

喜欢这个 -

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

这样,在视图中渲染时已经有了总和