Propel: Получить необработанный SQL из объекта запроса?
Как получить необработанный оператор SQL из объекта запроса в Propel? Мне это нужно для целей отладки.
Например: я хотел бы иметь функцию, как в
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
Существует ли что-то подобное?
2 answers
Да; вы ищете метод toString
из Критериев родительского класса:
$rawSql = (new BookQuery)::create()->filterById(25)->toString();
Как говорит @jakerella, конкретные значения, которые вы используете для фильтрации, будут привязаны к ядру базы данных, а не к движку, и поэтому вы увидите структуру запроса, но не точно, что будет выполнено. Если вы хотите это увидеть, то можете проверить журналы запросов к базе данных, если они включены.
Выполнив принятый ответ, вы можете использовать следующий код после выполнения запроса .
\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL
Это позволяет вам увидеть полный запрос ( включая выбранные столбцы и выбранные параметры), который был отправлен в базу данных.
УПД: ( как упоминалось @bbird)
Эта команда ничего не выведет, если useDebug
не true
:
\Propel::getConnection()->useDebug(true);
ОБНОВЛЕНИЕ 2: ( если вы используете Symfony каркас)
Еще одна вещь, о которой стоит упомянуть, - это PropelORM+ Симфония.
Если вам нужно отследить SQL, это возможно с помощью журналов. У Propel есть свой собственный монолог канал называется propel
, и полные запросы регистрируются с уровнем журнала DEBUG
на соответствующем канале (propel.DEBUG
).
Запись журнала/запроса выглядит следующим образом:
[2016-10-04 17:00:46] propel.DEBUG: time: 0.000 sec | mem: 24.8 MB | connection: default | SELECT `id`, `username`, `email`, `last_login` FROM `users` WHERE `id` = 123 [] []