Как получить исходный оператор SQL из объекта запроса в Propel? Мне нужно это для целей отладки.
Например: Я хотел бы иметь функцию, как в
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
Есть ли что-то подобное?
Как получить исходный оператор 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
не имеет значения 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 [] []