Phalcon의 쿼리 빌더 인스턴스에서 원시 SQL 쿼리를 추출 할 수 있습니까? 이 같은?Phalcon 쿼리 빌더에서 raw SQL 가져 오기
$queryBuilder = new Phalcon\Mvc\Model\Query\Builder();
$queryBuilder
->from(…)
->where(…);
$rawSql = $queryBuilder->hypotheticalGetRawQueryMethod();
Phalcon의 쿼리 빌더 인스턴스에서 원시 SQL 쿼리를 추출 할 수 있습니까? 이 같은?Phalcon 쿼리 빌더에서 raw SQL 가져 오기
$queryBuilder = new Phalcon\Mvc\Model\Query\Builder();
$queryBuilder
->from(…)
->where(…);
$rawSql = $queryBuilder->hypotheticalGetRawQueryMethod();
오류 및 평가판을 사용하면 다음과 같이 작동합니다. 더 나은 방법이 있는지 누군가가 확인할 수 있다면 좋을 것입니다. 당신이 매우 간단하고, 자세한 내용에 대한 comment를 참조 할 수 2.0.3 현재 :
$queryBuilder = new Builder();
$queryBuilder->from(…)->where(…);
$intermediate = $queryBuilder->getQuery()->parse();
$dialect = DI::getDefault()->get('db')->getDialect();
$sql = $dialect->select($intermediate);
편집
$modelsManager->createBuilder()
->from('Some\Robots')
->getQuery()
->getSql()
DbAdapter에서 getRealSqlStatement() (또는 유사한 함수 이름)를 사용할 수 있습니다. http://docs.phalconphp.com/en/latest/api/Phalcon_Db_Adapter.html
문서에 따르면 결과 SQL 쿼리를 얻을 수 있습니다.
기다리십시오. 쿼리 작성기에서 작동하지 않을 수도 있습니다. 그렇지 않으면 낮은 수준의 쿼리 로깅을 설정할 수 있습니다. http://docs.phalconphp.com/en/latest/reference/models.html#logging-low-level-sql-statements
$db = Phalcon\DI::getDefault()->getDb();
$sql = $db->getSQLStatement();
$vars = $db->getSQLVariables();
if ($vars) {
$keys = array();
$values = array();
foreach ($vars as $placeHolder=>$var) {
// fill array of placeholders
if (is_string($placeHolder)) {
$keys[] = '/:'.ltrim($placeHolder, ':').'/';
} else {
$keys[] = '/[?]/';
}
// fill array of values
// It makes sense to use RawValue only in INSERT and UPDATE queries and only as values
// in all other cases it will be inserted as a quoted string
if ((strpos($sql, 'INSERT') === 0 || strpos($sql, 'UPDATE') === 0) && $var instanceof \Phalcon\Db\RawValue) {
$var = $var->getValue();
} elseif (is_null($var)) {
$var = 'NULL';
} elseif (is_numeric($var)) {
$var = $var;
} else {
$var = '"'.$var.'"';
}
$values[] = $var;
}
$sql = preg_replace($keys, $values, $sql, 1);
}
더 당신이 읽을 수 there