php - 在 Laravel 中将 SQL 更改为查询生成器
问题描述
这是我的 SQL 语句
SELECT `pams_users`.display_name,`pams_user_levels`.description FROM pams_users
JOIN pams_developer ON `pams_users`.developer_id=`pams_developer`.id AND `pams_developer`.id=27 OR `pams_users`.`parent_dev`=27
JOIN pams_user_levels ON `pams_user_levels`.id=`pams_users`.user_level AND `pams_user_levels`.id=6
GROUP BY `pams_users`.display_name
这是我基于 SQL 的查询生成器
DB::table('pams_users')
->join('pams_developer','pams_developer.id','pams_users.developer_id')
->join('pams_user_levels','pams_user_levels.id','pams_users.user_level')
->where('pams_developer.id',27)
->orWhere('pams_users.parent_dev',27)
->where('pams_user_levels.id',6)
->select('developer_name','description','display_name')
->selectRaw('count(pams_users.id) as count')
->groupBy('display_name')
->get();
但是,查询生成器没有显示任何错误,而是显示与 SQL 语句不同的结果。
任何人都可以弄清楚我的查询生成器问题吗?
感谢您对我的查询生成器的任何建议和评论。
解决方案
问题可能是那里的 Eloquent 查询构建器没有封装 OR WHERE 子句。您可以将闭包传递where()
给它来执行此操作,如下所示。
我还将选择分组为单个方法调用,使用 usingDB::raw
而不是selectRaw()
方法。
DB::table('pams_users')
->join('pams_developer','pams_developer.id','pams_users.developer_id')
->join('pams_user_levels','pams_user_levels.id','pams_users.user_level')
->select([
'developer_name',
'description',
'display_name',
DB::raw('count(pams_users.id) as count'), // this avoids the separate selectRaw()
])
->where(function($query) {
$query->where('pams_developer.id',27)
->orWhere('pams_users.parent_dev',27);
})
->where('pams_user_levels.id',6)
->groupBy('display_name')
->get();
推荐阅读
- python - Django 用户密码中的 max_length 是多少?
- python - Nuke – 如何使用 Python 选择随机节点?
- java - 模拟 bean 中的方法无法正常工作
- python - 如何在大时间序列 DataFrame 上应用短时间序列线性回归
- linux - 使用使用 clone() 创建的线程时,线程本地存储不起作用
- javascript - 如何在 HTML/JavaScript 中轻松处理 JSON 重定向?
- python-3.x - 这两种解决 leetcode 873 的算法在时间和空间复杂度上有什么区别?
- node.js - 如何在 knex 的 where 子句中使用值数组?
- python-3.x - 最小化成本函数时带有 scipy.optimize 的 TypeError
- php - 打印发票数据空白php foreach循环错误