首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用laravel减少查询

用laravel减少查询
EN

Stack Overflow用户
提问于 2017-06-27 12:42:39
回答 1查看 32关注 0票数 0

快速的问题,我还没有找到自己的解决办法,也没有谷歌它。

在我的仪表板视图中,我显示了我的支付计划,只需执行$plans = Plan::all(),然后返回到视图。那里没什么花哨的。但是,在我的实际仪表板视图中,我想显示已完成的事务的总金额(以美元计)。因此,根据我的观点,我做了以下操作(去掉了示例):

代码语言:javascript
复制
@foreach($plans as $plan)
    {{ $plan->paidAmount() }}
@endforeach

它使用来自我的模型的以下方法:

代码语言:javascript
复制
private function paidAmount()
{
    return $this->transactions->sum('amount');
}

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

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

代码语言:javascript
复制
private function paidAmount()
{
    return $this->amount - $this->paidAmount();
}

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

我是否可以将paidAmountremainingAmount包含在我的原始查询中?我知道应该有办法的,我只是还没找到。所以,就像这样:

代码语言:javascript
复制
$plans = Plan::with('paidAmount')->get();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 12:51:24

您可以在主查询中使用以下子查询来计算和

就像这样-

代码语言:javascript
复制
$plans = Plan::all('*', DB::RAW("(SELECT SUM(amount) FROM transactions WHERE plan_id=plans.id ) as amount") );

这样,在视图中呈现时就已经有求和了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44780604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档