代码之家  ›  专栏  ›  技术社区  ›  Hardist

减少laravel中的查询

  •  0
  • Hardist  · 技术社区  · 8 年前

    在我的仪表板视图中,我显示我的付款计划,只需执行以下操作 $plans = Plan::all()

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

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

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

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

    这将生成另外5个查询。因此,对于一个显示一些信息的简单表,执行了多达11个查询。

    有什么方法可以包括 paidAmount remainingAmount 在我最初的查询中?我知道应该有办法,我只是还没找到。因此,大致如下:

    $plans = Plan::with('paidAmount')->get();
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Rohit Dalal    8 年前

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

    像这样-

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

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