处理查询时出现的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:select
stmd_adminusers
id,CONCAT(firstName,,,lastName)
as
name
from
stmd_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');