是否可以从Phalcon中的查询生成器实例中提取原始sql查询?像这样吗?
$queryBuilder = new Phalcon\Mvc\Model\Query\Builder();
$queryBuilder
->from(…)
->where(…);
$rawSql = $queryBuilder->hypotheticalGetRawQueryMethod();发布于 2014-01-24 23:19:23
通过错误和试验,下面的工作似乎是有效的。如果有人能确认是否有更好的方法,那就太好了。
$queryBuilder = new Builder();
$queryBuilder->from(…)->where(…);
$intermediate = $queryBuilder->getQuery()->parse();
$dialect = DI::getDefault()->get('db')->getDialect();
$sql = $dialect->select($intermediate);编辑:,从2.0.3开始,您可以做得非常简单,有关详细信息,请参阅评论:
$modelsManager->createBuilder()
->from('Some\Robots')
->getQuery()
->getSql()发布于 2014-01-24 22:15:23
您可以在getRealSqlStatement() (或类似的函数名)上使用DbAdapter。请参阅Adapter.html
根据文档,您可以通过这种方式获得结果sql查询。
或者等等,这在querybuilder上可能行不通。否则,可以设置低级别查询日志记录:http://docs.phalconphp.com/en/latest/reference/models.html#logging-low-level-sql-statements
发布于 2014-11-27 13:42:21
$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);
}更多您可以阅读那里
https://stackoverflow.com/questions/21339274
复制相似问题