我无法为自己找到解决方案的快速问题,也无法使用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个查询。
我可以在原始查询中包含paidAmount
和remainingAmount
吗?我知道应该有办法,我还没有找到它。所以只是一些东西:
$plans = Plan::with('paidAmount')->get();
答案 0 :(得分:2)
您可以在主查询中使用子查询这样计算总和
喜欢这个 -
$plans = Plan::all('*', DB::RAW("(SELECT SUM(amount) FROM transactions WHERE plan_id=plans.id ) as amount") );
这样,在视图中渲染时已经有了总和