如何获取学说的原始sql

Thi*_*ool 2 php doctrine-orm

我更喜欢了解 Doctrine,并想分析由我的 DQL 或 find 方法构建的 SQL。

是否可以在 PHP 中打印出该语句?

另一个问题是:编写自己的 DQL 是不是更高效,尤其是一些连接,或者当我使用 find 方法时,学说是否足够聪明以匹配这些?

Tim*_*rib 7

根据Symfony2 中的 Logging Doctrine SQL 查询

您可以使用 Doctrine 记录器,例如DebugStack或自己的SQLLogger接口实现。

$logger = new \Doctrine\DBAL\Logging\DebugStack();

/* @var Doctrine\DBAL\Connection $connection */
$connection->getConfiguration()->setSQLLogger($logger);
Run Code Online (Sandbox Code Playgroud)

执行一些查询后,您可以从记录器的公共属性中获取查询字符串和参数。

var_dump($logger->queries);
Run Code Online (Sandbox Code Playgroud)

你的第二个问题非常不同。顺便说一句,如文档中所述:

尚未从数据库加载的对象将替换为延迟加载代理实例。未加载的集合也被延迟加载实例取代,这些实例在第一次访问时获取所有包含的对象。然而,依赖延迟加载机制会导致对数据库执行许多小查询,这会显着影响应用程序的性能。Fetch Joins 是在单个 SELECT 查询中对您需要的大部分或所有实体进行水合的解决方案。