我正在使用來自Doctrine查詢的實體對象,並且最終得到了一個非常大的數組,其中包含來自所有相關實體的所有信息。這最終是一個巨大的數據樹...我怎麼能限制這個?避免列出所有關係中的所有數據?Doctrine/Symfony 2:具有太多關係的實體
回答
您可以隨時移除不需要的關聯(這是加速Doctrine的最佳做法)。或者你也可以選擇只在您的表示層需要的字段(如只讀數據):
public function getAll()
{
$qb = $this->createQueryBuilder('u'); // Where are in User custom repository
return $qb
->select(array('u.id', 'u.first', 'u.last'))
->getQuery()
->getResult();
}
如果您仍然需要使用對象的工作(或對於複雜的查詢,需要普通的SQL)的可能性是填充只需要域對象的屬性(最終是關聯/嵌套集合)。
一個例子,更多native SQL:(?)
public function getAll()
{
$mapping = new \Doctrine\ORM\Query\ResultSetMapping();
$mapping->addEntityResult('Acme\HelloBundle\User', 'e');
$mapping->addFieldResult('e', 'id', 'id');
$mapping->addFieldResult('e', 'first', 'first');
$mapping->addFieldResult('e', 'last', 'last');
$sql = "SELECT id, first, last FROM user ";
$result = $this->_em->createNativeQuery($sql, $mapping)->getResult();
// Or hust return $result itself (array)
return new \Doctrine\Common\Collections\ArrayCollection($result);
}
當然的disadvance是使用原生SQL的。我不相信ResultSetMapping
可以用於DQL。
編輯:看看http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/best-practices.html
我正在尋找一種簡單的方法來在Doctrine中禁用延遲加載,或者獲得最大關係深度。可能嗎? – vinnylinux 2012-08-08 22:58:01
@vinnylinux如果我正確地記得它,延遲加載是當你選擇數據的一個子集,然後,當訪問未加載的屬性或關聯時,doctrine將爲你加載(在另外的查詢中)所有數據。所以懶加載是一件好事。正如我所說,這取決於。什麼是數據用於? – gremo 2012-08-08 23:06:35
當你使用類似JMSSerializer包的序列化數據時,這肯定不是一件好事。用具有各種關係的相當大的數據集測試自己。它開始遞歸。 – vinnylinux 2012-08-08 23:26:05
- 1. Symfony的具有一對多的關係2刪除實體
- 2. 具有多個自關係的Hibernate實體(遞歸關係)
- 3. 實體關係圖 - 可具有多種類型的實體
- 4. 實體框架具有唯一實體的一對多關係
- 5. 避免太具體的依賴關係
- 6. REST API,具有關係的POST實體?
- 7. 刪除具有關係的實體
- 8. 具有ManyToOne關係的FOSUserBundle實體
- 9. 保存/更新具有多對多關係的Hibernate實體
- 10. NSPredicate - 具有多對多關係的提取實體
- 11. Hibernate映射,具有多對多關係表的實體
- 12. Linq查詢具有多對多關係的搜索實體
- 13. 具有重複子項的多對多關係實體框架
- 14. 具有多對多關係的Symfony2表單實體字段
- 15. 保存到具有多對多關係的實體
- 16. 創建具有多對多關係的NSFetchedResultsController管理實體
- 17. 具有多對多關係的實體框架
- 18. 如何查詢具有多對多關係的實體?
- 19. 實體框架多對多關係,具有相同的鏈接實體
- 20. 在實體框架/ ASP.NET MVC中保存具有關係的實體2
- 21. Symfony 2 - 如何設置三個實體之間具有多對多關係的關係
- 22. Angular 2 - 太多的包依賴關係
- 23. 實體框架。查詢Entitties具有多對多關係
- 24. Zend框架2學說2多對多實體關係問題
- 25. 實體框架:具有關係和更多關係的對象設計
- 26. 兩個具有常見一對多關係的實體
- 27. 自跟蹤實體具有一對多的關係
- 28. Successfactors具有一對多關係的ODATA更新實體
- 29. 實體關係 - CodeFirst - 多重關係
- 30. 實體之間具有一對多交叉關係的實體關係模型。這是錯的嗎?
我不知道是否有幫助,但你可以嘗試做' - >的getResult(學說\ ORM \查詢:: HYDRATE_ARRAY)'在查詢結束,結果將作爲數組返回 – Gigala 2013-10-09 13:49:54