2017-07-28 69 views
0

我喜歡更多地理解原則,並且想要分析從我的DQL或查找方法構建的SQL至少要遵守的原則。如何獲得原則的原始數據庫

是否有可能在PHP中打印語句?

另一個問題是: 它是更高性能,編寫自己的DQL,尤其是有些連接,或者是足夠聰明的原則來匹配這些當我使用find方法嗎?

+3

可能重複的[學說 - 如何打印出真正的SQL,而不僅僅是準備好的聲明?](https://stackoverflow.com/questions/2095394/doctrine-how-to-print-out-the -real-sql-not-just-the-prepared-statement) – iainn

+0

好的,這對DQL查詢很好,但是如果我想使用find方法呢? $ this-> getEntityManager() - > getRepository(User :: class) - > find(1); – ThiKool

回答

1

根據Logging Doctrine SQL queries in Symfony2

可以使用學說記錄儀如DebugStack或自己實現SQLLogger接口。

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

/* @var Doctrine\DBAL\Connection $connection */ 
$connection->getConfiguration()->setSQLLogger($logger); 

執行某些查詢後,您可以從記錄器的公共屬性中獲取查詢字符串和參數。

var_dump($logger->queries); 

你的第二個問題是非常不同的。順便說一句,在documentation說:是不是已經從數據庫加載

對象被替換 與延遲加載代理實例。未加載的集合也被 替換爲延遲加載實例,該實例在首次訪問時提取所有包含的對象 。但是依賴於延遲加載機制會導致對數據庫執行很多小型查詢,這可能會對應用程序的性能產生顯着影響。 Fetch Joints 是在單個SELECT查詢中爲您需要的大多數或所有實體提供水合物的解決方案 。