我想从外部数组中获取查询的选定字段。
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:从
选择stmd_adminusers
id, CONCAT(firstName, ' ', lastName)
。name
作为stmd_adminusers
答案 0 :(得分:2)
每当使用Some Mysql本机函数时,都必须使用DB::raw()
$resultSet = UserAdmin::whereRaw($where)
->addSelect(array(DB::raw($string)))
->groupBy('adminusers.id');
希望这有帮助。
答案 1 :(得分:2)
您可以改为使用->selectRaw($string)
:
$where = '1';
$resultSet = UserAdmin::whereRaw($where)
->selectRaw($string)
->groupBy('adminusers.id');
这比使用->addSelect(DB::raw($string))
更有优势,你可以(可选)添加第二个参数$bindings
;这将比使用DB::raw()
更能保护您免受SQL注入攻击。