Мне нужно выполнить запрос с помощью 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)
Есть идеи?
Это не мой окончательный запрос, это просто пример, показывающий, что простой запрос не работает.
Если вы можете, пожалуйста, не просто предоставляйте упрощенную версию того, чего вы пытаетесь достичь, поскольку это означает, что вы обычно не получите помощь / совет, который вам нужен. Можете ли вы добавить код, который у вас действительно есть, к вашему вопросу, а также, если вы можете, просто предоставить краткий обзор того, чего вы пытаетесь достичь и почему :)






У вас есть синтаксическая ошибка, попробуйте удалить : в $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')
Спасибо, Росс, проблема была в имени таблицы, я использовал для него заполнитель. Если я удалю его, запрос работает.
Вы не можете просто заменить имена таблиц или столбцов.
Подробнее: 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();
Надеюсь, это поможет вам.
Есть ли причина, по которой вы делаете это как необработанный запрос, а не используете методы в построителе запросов?