如何编译 Propel Criteria 来清除 SQL? 我试过 $criteria->toString();但这不是我所期望的。 我也试过 ModelPeer::doSelectStmt($criteria) 但它返回原始 sql(需要参数替换)
最佳答案
首先,重要的是要注意 Propel 将 PDO 与准备好的语句一起使用,因此您不会在 PHP 中获得完全“内置”的 SQL 语句。使用 Criteria->toString() 是一个好的开始,但正如 Peter 提到的那样,很多工作确实是由 BasePeer::createSelectSql() 方法完成的。
这是最完整的方法(来自 Propel),可以查看 SQL 的外观(带有占位符)以及将在其中替换的参数:
$params = array(); // This will be filled with the parameters
$sql = BasePeer::createSelectSql($criteria, $params);
print "The raw SQL: " . $sql . "\n";
print "The parameters: " . print_r($params, true) . "\n";
请注意,仅在数据库级别记录查询可能会取得更好的效果。当然,如果 PDO 配置(或支持)使用本地数据库准备语句,那么您可能仍然会在数据库中看到占位符。
关于php - 如何将 Propel Criteria 编译为 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399772/