Laravel 带join和sum的雄辩查询

Laravel 带join和sum的雄辩查询,laravel,eloquent,Laravel,Eloquent,我有这些桌子: A:id、总导入、其他列 B:id,a\u id,部分导入 我想知道A中B.partial\u import的总和小于A.total\u 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 选择一个*和(B.partial\u

我有这些桌子:

  • A:id、总导入、其他列
  • B:id,a\u id,部分导入
我想知道A中
B.partial\u import
的总和小于
A.total\u 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
选择一个*和(B.partial\u import)作为和
从
A.id=B.A\u id上的内部联接B
B.a_id分组
总和小于A。总和或总和为空

任何关于以雄辩的方式复制它的最佳解决方案的建议都将不胜感激。

最快也是最好的方法是使用

如果您想改用集合,那么应该首先设置集合,然后构建雄辩的查询

我假设您的A表有许多B行,因此关系可能看起来像(在模型中):

那么你的口才会是这样的:

App\A::all()
->B()
->groupBy('B.a_id')
->havingRaw('sum < A.total or sum is null');
然后您的查询将类似于以下代码:

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();
DB::table('A')
->join('B','A.id','=','B.A_id')
->groupBy(“B.a\U id”)
->havingRaw('sum选择原始('A.*,总和(B.部分导入)作为总和')
->get();

Elount或query builder?是相同的。在收到正确答案后,查询生成器也会变得更好,您应该接受它。您也不应该期望帮助人员为您的问题提供完整的解决方案。在您的示例中,缺少select sum(B.partial_total)。有了这个,我得到了这个错误:
SQLSTATE[42000]:语法错误或访问冲突:1055'A.id'不在groupby(SQL:select A.*,sum(B.partial_import)作为A.id=B.A_id GROUP BY B.A_id具有A.total>sum或sum为null)中。
从您的查询中,我添加了:
->选择('A.*,DB::raw('sum(B.partial_import)作为总和))
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();