Laravel 5.5 и DB::raw не могут выполнить запрос

Мне нужно выполнить запрос с помощью DB::raw, но, похоже, он вообще не работает.
По какой-то причине Laravel не выполняет привязки, и запрос не выполняется. Я пробовал много запросов, событий, и даже простой не работает.

use Illuminate\Support\Facades\DB;

$query = 'select id from :my_table';

$results = DB::select(
    DB::raw($query),
    [
        'my_table' => 'advertisement__rentadvertisements',
    ]
);

dd($results);

Ошибка

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1 (SQL: select id from :my_table)

Есть идеи?

Есть ли причина, по которой вы делаете это как необработанный запрос, а не используете методы в построителе запросов?

Rwd 15.07.2019 09:43

Это не мой окончательный запрос, это просто пример, показывающий, что простой запрос не работает.

Christian Giupponi 15.07.2019 09:56

Если вы можете, пожалуйста, не просто предоставляйте упрощенную версию того, чего вы пытаетесь достичь, поскольку это означает, что вы обычно не получите помощь / совет, который вам нужен. Можете ли вы добавить код, который у вас действительно есть, к вашему вопросу, а также, если вы можете, просто предоставить краткий обзор того, чего вы пытаетесь достичь и почему :)

Rwd 15.07.2019 09:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
3
352
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

У вас есть синтаксическая ошибка, попробуйте удалить : в $query, и все будет в порядке, а также в вашем утверждении требуется условие, например select * from table_name where id = ?

Ваш синтаксис привязки кажется проблемой. В вашем массиве отсутствует точка с запятой:

$query = "select id from :my_table";

$results = DB::select(
    DB::raw($query),
    [
        ':my_table' => 'advertisement__rentadvertisements',
    ]
);

Ошибка:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1 (SQL: select id from :my_table)"

указывает, что :my_table в вашем запросе не заменяется на advertisement__rentadvertisements.

Ответ принят как подходящий

Как упоминалось в эта почта и эта почта, вы не можете просто заменить имена таблиц или столбцов.

Если вы не упростили свой пример и происходит больше, чем вы упомянули, я бы предложил просто использовать построитель запросов:

DB::table('advertisement__rentadvertisements')->get('id')

Спасибо, Росс, проблема была в имени таблицы, я использовал для него заполнитель. Если я удалю его, запрос работает.

Christian Giupponi 15.07.2019 10:11

Вы не можете просто заменить имена таблиц или столбцов.

Подробнее: https://laravel.com/docs/5.8/queries#selects

Изменять:

$query = 'select id from :my_table';

$results = DB::select(
    DB::raw($query),
    [
        'my_table' => 'advertisement__rentadvertisements',
    ]
);

к:

$results = DB::table('advertisement__rentadvertisements')->select('id')->get();

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

Другие вопросы по теме