Проблема с запятой в Laravel при работе с запросом - PullRequest
0 голосов
/ 16 мая 2018

Я хотел получить выбранные поля запроса из внешнего массива.

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 голосов
/ 16 мая 2018

Вы можете использовать ->selectRaw($string) вместо:

$where = '1';
$resultSet = UserAdmin::whereRaw($where)
                 ->selectRaw($string)
                 ->groupBy('adminusers.id');

Преимущество по сравнению с ->addSelect(DB::raw($string)) в том, что вы можете (необязательно) добавить второй параметр $bindings; которая защитит вас от атак SQL-инъекций больше, чем использование DB::raw().

0 голосов
/ 16 мая 2018

Каждый раз, когда вы используете какую-то встроенную функцию Mysql, вы должны использовать DB::raw()

$resultSet = UserAdmin::whereRaw($where)
                ->addSelect(array(DB::raw($string)))
                ->groupBy('adminusers.id'); 

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...