Propel: получить Raw SQL из объекта Query? - программирование
Подтвердить что ты не робот

Propel: получить Raw SQL из объекта Query?

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

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

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

Есть ли что-то подобное?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL

Он позволяет вам видеть полный запрос (включая выбор столбцов и выбранных параметров), который был отправлен в базу данных.


UPD: (как упоминалось @bbird)

Эта команда ничего не выводит, если useDebug не имеет значения true:

\Propel::getConnection()->useDebug(true);

UPD2: (если вы используете инфраструктуру Symfony)

Еще одна вещь, которую стоит упомянуть, это PropelORM + Symfony.

Если вам нужно отслеживать SQL, это возможно с помощью журналов. У Propel есть собственный канал monolog под названием 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 [] []