我有一个 MYSQL 查询,需要在 Laravel 5.6 查询生成器上运行。我的查询是
SELECT paper_id,user_id,COUNT(payments.user_id),users.district
FROM payments
LEFT JOIN users ON payments.user_id = users.id
WHERE payments.paper_id=3
GROUP BY users.district HAVING COUNT(payments.user_id)>=0;
我尝试使用此代码在 Laravel DB::Raw
上运行它
$data=DB::Raw('SELECT paper_id,user_id,COUNT(payments.user_id),users.district
FROM payments
LEFT JOIN users ON payments.user_id = users.id
WHERE payments.paper_id='.$paper_id.'
GROUP BY users.district HAVING
COUNT(payments.user_id)>=0
');
以及通过此代码
$data2=DB::table('payments')
->leftJoin('users','payments.user_id','users.id')
->select('paper_id','user_id','users.district',
DB::Raw('COUNT(payments.user_id)'))
->where('payments.paper_id',$paper_id)
->groupBy('users.district')
->select(DB::Raw('HAVING COUNT(payments.user_id)>=0'))
->get();
我在$data
(第一个查询)查询中遇到错误
[{}]
我得到一个空回复
我在`$data2(第二个查询)查询上遇到错误
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'HAVING COUNT(payments.user_id)>=0 from payments left join users on payments at line 1 (SQL: select HAVING COUNT(payments.user_id)>=0 from payments left join users on payments.user_id = users.id where payments.paper_id = 1 group by users.district)
但是我遇到 SQL 语法错误,有人可以告诉我如何将 SQL 转换为 Laravel 查询生成器格式吗?
最佳答案
运行原始 SQL 查询
$data = DB::select('SELECT paper_id,user_id,COUNT(payments.user_id),users.district
FROM payments
LEFT JOIN users ON payments.user_id = users.id
WHERE payments.paper_id= ?
GROUP BY users.district HAVING
COUNT(payments.user_id)>=0', [$paper_id]);
参数绑定(bind)提供针对 SQL 注入(inject)的保护。
groupBy/具有
->select(DB::Raw('HAVING COUNT(payments.user_id)>=0'))
=>
->having(DB::Raw('COUNT(payments.user_id)'), '>=', 0)
https://laravel.com/docs/5.6/queries#ordering-grouping-limit-and-offset
关于php - 在 Laravel 上运行 mysql 查询 `DB::Raw`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49318001/