首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Phalcon查询生成器获取原始sql

从Phalcon查询生成器获取原始sql
EN

Stack Overflow用户
提问于 2014-01-24 17:57:28
回答 6查看 21.1K关注 0票数 13

是否可以从Phalcon中的查询生成器实例中提取原始sql查询?像这样吗?

代码语言:javascript
运行
复制
$queryBuilder = new Phalcon\Mvc\Model\Query\Builder();
$queryBuilder
    ->from(…)
    ->where(…);

$rawSql = $queryBuilder->hypotheticalGetRawQueryMethod();
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-24 23:19:23

通过错误和试验,下面的工作似乎是有效的。如果有人能确认是否有更好的方法,那就太好了。

代码语言:javascript
运行
复制
$queryBuilder = new Builder();
$queryBuilder->from(…)->where(…);

$intermediate = $queryBuilder->getQuery()->parse();
$dialect      = DI::getDefault()->get('db')->getDialect();
$sql          = $dialect->select($intermediate);

编辑:,从2.0.3开始,您可以做得非常简单,有关详细信息,请参阅评论

代码语言:javascript
运行
复制
$modelsManager->createBuilder()
    ->from('Some\Robots')
    ->getQuery()
    ->getSql()
票数 20
EN

Stack Overflow用户

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2014-11-27 13:42:21

代码语言:javascript
运行
复制
$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);
}

更多您可以阅读那里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21339274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档