我正在使用來自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. 實體框架具有唯一實體的一對多關係
- 2. REST API,具有關係的POST實體?
- 3. 具有多對多關係的實體框架
- 4. 具有重複子項的多對多關係實體框架
- 5. NSPredicate - 具有多對多關係的提取實體
- 6. 保存/更新具有多對多關係的Hibernate實體
- 7. 創建具有多對多關係的NSFetchedResultsController管理實體
- 8. Hibernate映射,具有多對多關係表的實體
- 9. 在實體框架/ ASP.NET MVC中保存具有關係的實體2
- 10. 實體框架。查詢Entitties具有多對多關係
- 11. Successfactors具有一對多關係的ODATA更新實體
- 12. 實體之間具有一對多交叉關係的實體關係模型。這是錯的嗎?
- 13. 我可以在2個實體之間有多重關係嗎?
- 14. 如何處理許多JPA實體具有外鍵關係
- 15. 實體關係,其中一個實體具有對同一實體類型的2的引用?
- 16. EF5許多關係實體
- 17. 多關係選擇實體
- 18. 多對多關係的實體Sql
- 19. 來自具有多對多關係的三個實體的FetchRequests,核心數據
- 20. 如何僅在實體框架中引用具有多對多關係的ID?
- 21. 如何使用MockMvc更新具有多對多關係的實體?
- 22. 更新具有多對多關係的實體框架4模型,如何?
- 23. 如何使用實體框架提交具有多對多關係的對象?
- 24. JPA實體關係多對多的自我關係
- 25. JPA:兩個實體之間有多個多對多的關係?
- 26. Doctrine 2 - 無法級聯刪除具有雙向關係的實體
- 27. Symfony 2實體間關係組合
- 28. Symfony2的多對多關係沒有鏈接2名的實體 - Doctrine2試圖堅持逆實體
- 29. 實體關係
- 30. 實體關係
我不知道是否有幫助,但你可以嘗試做' - >的getResult(學說\ ORM \查詢:: HYDRATE_ARRAY)'在查詢結束,結果將作爲數組返回 – Gigala 2013-10-09 13:49:54