具有连接和求和的雄辩查询

时间:2018-03-20 08:10:21

标签: laravel eloquent

我有这些表格:

  • A:id,total_import,other_columns
  • B:id,a_id,partial_import

我想知道A中的所有行,其中B.partial_import的总和小于A.total_import

这是我的疑问:

select A.*, sum(B.partial_import) as sum
from A
inner join B on A.id = B.a_id
group by B.a_id
having sum < A.total or sum is null

任何有关以雄辩的方式复制它的最佳解决方案的建议都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

最快的方式也是一种好的方法是使用 query builder

如果你想使用Collection,那么你应该首先设置relationships,然后建立你的雄辩查询。

我认为你的A表有很多B行,所以关系看起来像(在A模型中):

public function B()
{
   return $this->hasMany('App\B');
}

那么你的雄辩将会是:

App\A::all()
->B()
->groupBy('B.a_id')
->havingRaw('sum < A.total or sum is null');

如果您想使用查询构建器,您的代码将如下所示:

首先在控制器使用开始时使用:

use DB;

然后您的查询将类似于以下代码:

DB::table('A')
->join('B', 'A.id', '=', 'B.a_id')
->groupBy('B.a_id')
->havingRaw('sum < A.total or sum is null')
->selectRaw('A.*, sum(B.partial_import) as sum')
->get();