php - 在 Laravel 上运行 mysql 查询 `DB::Raw`

标签 php mysql laravel-5.6

我有一个 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)的保护。

https://laravel.com/docs/5.6/database#running-queries

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/

相关文章:

php - 将商标符号添加到整个网站的特定短语

mysql - 我怎么能在 MySQL 中做到这一点

mysql - Wordpress SQL 删除自定义帖子类型和元数据

amazon-s3 - Laravel 将文件从一个磁盘移动到另一个磁盘 - 使用 `Storage`

php - Laravel 迁移 SQLSTATE[42000] : Syntax error or access violation: 1064

php - mysql 匹配...通过引用字符串变量

php - MySQL RegEx 搜索每一列

php - Braintree 测试,无法让 Braintree 拒绝卡

php - 如何使用 'DROP TABLE IF EXISTS'导入多数据库MySQLdump?

laravel - 按子查询对主查询排序