Как связать колонку в Laravel Builder? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть следующий код (Laravel 5.6 PHP 7.0):

$orders = DB::table('orders')
            ->selectRaw('?', ['id'])
            ->get();

В моем воображении этот код должен выполнить такой sql:

SELECT `id` FROM orders

и должен вернуть результатнапример:

array [
   0 => {
     "id": "1"
   }
   1 => {
     "id": "2"
   }

к сожалению, это возвращает:

array [
   0 => {
     "?": "id"
   }
   1 => {
     "?": "id"
   }

Но если я запускаю следующий код, все работает, как я хочу:

$orders = DB::table('orders')
             ->selectRaw('id')
             ->get();

Итак, мойвопросы:

  1. Почему первый код возвращает такой странный результат?

  2. Как связать столбец?

1 Ответ

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

Это потому, что PDO заключает связанные параметры в кавычки, поэтому ваш SQL будет выглядеть примерно так:

SELECT 'id' FROM orders

Вы выбираете идентификатор строки, а не столбец.Вы не можете связать имена столбцов, только значения.

Чтобы ваш запрос работал, в том же формате, что и вы, вам нужно сделать это:

$columns = ['id'];

$orders = DB::table('orders')
        ->select($columns)
        ->get();

Если выесли вы хотите быть более безопасными, например, если вы получаете имена столбцов из строки запроса или чего-то еще, вы можете сделать:связанные параметры, вы можете сделать следующее:

$query = DB::table('table_name')->select(['id', 'column1']);

dd($query->toSql(), $query->getBindings());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...