处理查询时出现的Laravel分号问题
我想从外部数组中获取查询的选定字段处理查询时出现的Laravel分号问题,laravel,laravel-5,Laravel,Laravel 5,我想从外部数组中获取查询的选定字段 foreach($param as $key => $val){ if($val == 'userId'){ $string .= "adminusers.id, "; } if($val == 'name'){ $string .= "CONCAT(firstName, ' ', lastName) as name";
foreach($param as $key => $val){
if($val == 'userId'){
$string .= "adminusers.id, ";
}
if($val == 'name'){
$string .= "CONCAT(firstName, ' ', lastName) as name";
}
}
我的问题就在下面
$where = '1';
$resultSet = UserAdmin::whereRaw($where)
->addSelect(array($string))
->groupBy('adminusers.id');
然而,我收到了这样一封信:
SQLSTATE[42S22]:未找到列:1054“字段列表”中的未知列“stmd_adminusers.id,CONCAT(firstName,,,lastName)”(SQL:selectstmd_adminusers
id,CONCAT(firstName,,,lastName)
asname
fromstmd_adminusers
无论何时使用Mysql本机函数,都必须使用
DB::raw()
希望这有帮助。您可以使用
->selectRaw($string)
代替:
$where = '1';
$resultSet = UserAdmin::whereRaw($where)
->selectRaw($string)
->groupBy('adminusers.id');
与使用
->addSelect(DB::raw($string))
相比,这有一个优势,即您可以(可选)添加第二个参数$bindings
;这将比使用DB::raw()
更能保护您免受SQL注入攻击。为什么whereRaw($where)
?@C2486将在以后的开发期间包含更多选项如果只有$val=='name'
存在会发生什么?如果只有$val=='name'
存在会发生什么?groupBy会起作用吗?是的,因为您没有使用严格模式
$where = '1';
$resultSet = UserAdmin::whereRaw($where)
->selectRaw($string)
->groupBy('adminusers.id');