Intereting Posts
cakephp: перейти на предыдущую страницу после редактирования игрока Laravel5.1: проверять поле времени (время начала должно быть больше конечного времени) Подход формы формы PHP к Django's ___? Дружественные URL-адреса в Laravel, я делаю это правильно? Хорошо ли использовать htmlspecialchars () перед вставкой в ​​MySQL? Добавление бутстрапа в WordPress с помощью functions.php codeignign изменить язык form_validation_lang Лучшая альтернатива для password_hash в PHP 5.3.27? echo user in view from session code ignitter Как предотвратить перезагрузку страницы после нажатия на гиперссылку, но перенаправить на эту страницу и выработать необходимый код, написанный там? Добавить 30 дней для даты в db PHP SFTP Простая загрузка файлов Что может объяснить браузер с перерывами, не загружая некоторые файлы CORS (crossorigin) javascript? Удаление недопустимых / неполных многобайтовых символов Каков наилучший способ создания облака тегов из массива с использованием h1-h6 для определения размера?

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

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

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

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

Что-то вроде этого существует?

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

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

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

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

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

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


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

Эта команда ничего не useDebug если useDebug не true :

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

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

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

Если вам нужно отслеживать 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 [] []