我有这些表格:
我想知道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
任何有关以雄辩的方式复制它的最佳解决方案的建议都将受到赞赏。
答案 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();