处理查询时的Laravel分号问题

时间:2018-05-16 11:26:31

标签: laravel laravel-5

我想从外部数组中获取查询的选定字段。

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

2 个答案:

答案 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注入攻击。