Как получить исходный оператор 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 [] []