Как получить исходный оператор SQL из объекта запроса в Propel? Мне нужно это для целей отладки.
Например: Я хотел бы иметь функцию, как в
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
Есть ли что-то подобное?
Ответ 1
Да; вы следуете за методом toString из Criteria родительского класса:
$rawSql = (new BookQuery)::create()->filterById(25)->toString();
Как говорит @jakerella, конкретные значения, которые вы используете для фильтрации, будут привязаны движком базы данных, а не Propel, и поэтому вы увидите структуру запроса, но не точно, что будет выполнено. Если вы хотите это увидеть, вы можете проверить журналы запросов базы данных, если они включены.
Ответ 2
Выполняя принятый ответ, вы можете использовать следующий код после выполнения запроса.
Он позволяет вам видеть полный запрос (включая выбор столбцов и выбранных параметров), который был отправлен в базу данных.
UPD: (как упоминалось @bbird)
Эта команда ничего не выводит, если useDebug не имеет значения true:
\Propel::getConnection()->useDebug(true);
UPD2: (если вы используете инфраструктуру Symfony)
Еще одна вещь, которую стоит упомянуть, это PropelORM + Symfony.
Если вам нужно отслеживать SQL, это возможно с помощью журналов. У Propel есть собственный канал monolog под названием propel, и полностью соответствующие запросы регистрируются с уровнем журнала DEBUG на соответствующем канале (propel.DEBUG).
Запись журнала/запроса выглядит следующим образом: