我查询使用关系表中的值和来添加自定义的"balance“列。
User::withCount(['transactions as balance' => function($query) {
$query->select(\DB::raw('sum(credit_movement)'));
}]);
这对于返回"balance“列很好。
现在,我想过滤有关"balance“列的用户。
->where('balance', '<', 0);
如果我将其链接到查询,它将不工作,因为"balance“列不存在。
User::withCount(['transactions as balance' => function($query) {
$query->select(\DB::raw('sum(credit_movement)'));
}])
->where('balance', '<', 0);
我试着用
User::withCount(['transactions as balance' => function($query) {
$query->select(\DB::raw('sum(credit_movement)'));
}])
->having('balance', '<', 0); // won't work
// also:
->havingRaw('balance < 0'); // won't work
但这些都不管用。
从句中的未知数“balance”
我希望查询只返回余额小于0的用户。(我希望在查询生成器中实现它,而不是集合上的->filter()
。
更新:
我试过使用whereHas()
,但写得不正确
User::withCount(['transactions as balance' => function($query) {
$query->select(\DB::raw('sum(credit_movement)'));
}])
->whereHas('transactions', function($q) {
$q->whereRaw('sum(credit_movement), < ?', 0);
});
语法错误或访问冲突: 1064您的SQL语法出现了错误;请检查与MySQL服务器版本对应的手册,以获得使用“<?”
的正确语法。
发布于 2020-09-28 15:53:23
终于起作用了:
User::whereHas('transactions', function($q) {
$q->select(\DB::raw('SUM(credit_movement) as balance'))
->havingRaw('balance < 0');
});
});
https://stackoverflow.com/questions/64108475
复制