This is my SQL statement
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
This is my query builder based on the 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();
However, the query builder did not show any error but show different result with the SQL statement.
Anyone can figure out my query builder problem ?
Any suggestion and comment on my query builder is appreciated.
The issue is probably the OR WHERE clause not being encapsulated by the Eloquent query builder there. You can pass a closure into where()
for it to do that, as shown below.
I've also grouped the selects into a single method call, with using DB::raw
instead of the selectRaw()
method.
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();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.