Propel: Получить необработанный SQL из объекта запроса?


Как получить необработанный оператор SQL из объекта запроса в Propel? Мне это нужно для целей отладки.

Например: я хотел бы иметь функцию, как в

$rawSql = new BookQuery::create()->filterById(25)->getRawSql();

Существует ли что-то подобное?

Author: twigmac, 2013-05-02

2 answers

Да; вы ищете метод toString из Критериев родительского класса:

$rawSql = (new BookQuery)::create()->filterById(25)->toString();

Как говорит @jakerella, конкретные значения, которые вы используете для фильтрации, будут привязаны к ядру базы данных, а не к движку, и поэтому вы увидите структуру запроса, но не точно, что будет выполнено. Если вы хотите это увидеть, то можете проверить журналы запросов к базе данных, если они включены.

 19
Author: halfer, 2016-06-06 01:10:09

Выполнив принятый ответ, вы можете использовать следующий код после выполнения запроса .

\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 [] []
 8
Author: Paul T. Rawkeen, 2016-10-10 09:31:26