Если ваша конечная цель состоит в том, чтобы получить выполняемый запрос, то одним из решений было бы найти, где он пишет инструкцию INSERT, и умереть и вывести созданный им запрос.Поскольку у нас есть доступ к исходному коду, мы можем это сделать.
Вот где вы захотите посмотреть: \vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php
В Grammer.php
вы найдете функцию с именем compileInsert
.
В конце у него есть return "insert into $table ($columns) values $parameters";
Настройте его на dd("insert into $table ($columns) values $parameters");
, затем запишите запись в базу данных, и она должна показать созданный оператор INSERT.
В случае, если это полезно, я нашел файл, открыв проводник (я сейчас использую Windows), и в каталоге моего проекта laravel я искал «Eloquent».Лучший результат - каталог Eloquent.Затем я запустил в этом каталоге быструю команду powershell, чтобы увидеть, где может существовать INSERT INTO.
Get-ChildItem -recurse | Select-String -pattern "insert into" | group path | select name
4 файла были возвращены мне, и Grammar.php был победителем.
РЕДАКТИРОВАТЬ:
Я понял, что просто даетзапрос с "?"заполнители для значений.Попробуйте что-то вроде этого, чтобы вывести как запрос, так и вставляемые значения.Примечание. Я включил оператор if, чтобы он случайно не запускался на какой-то другой таблице, которая может быть вставлена до того, как она попадет в ту часть процесса, которая вас интересует.
if ($table == "[your_table_name_here]") {
dd(["insert into $table ($columns) values $parameters", $values]);
}
Это не даст полного необработанногоSQL, но вы должны быть в состоянии получить очень хорошее представление о том, что он в итоге выполняет.Если вам нужен необработанный SQL, все сводится к PDO в \vendor\laravel\framework\src\Illuminate\Database\Connection.php
, функция statement
.И я хотел бы задать вам этот вопрос для понимания этого: Получение необработанной строки запроса SQL из подготовленных операторов PDO