當我在原則執行是這樣的:分配多個不同的實體,以一個陣列排學說
$qb = $doctrine
->getRepository('EntityA')
->createQueryBuilder('a')
->addSelect('b')
->join('EntityB', 'b', 'WITH', 'a.b = b')
->getQuery()
->getResult()
我得到一個數組,看起來像這樣:
array(0 => EntityA,
1 => EntityB,
2 => EntityA,
4 => EntityB)
事實上,我得到2個結果行,而是一個大小爲4的數組。這使得遍歷它幾乎不可能在模板中顯示。
我想這樣的結果:
array(0 => array(EntityA, EntityB),
1 => array(EntityA, EntityB))
當然我可以創建EntityA
映射引用EntityB
。但即使有可能改變加載行爲,例如LAZY
,EAGER
等,可能希望有可能在運行中創建這種關係。
例如:
在具有大量實體的概觀,需要EAGER
加載,以防止查詢的過量。但是,當我只想顯示一個實體並且不需要額外的數據時,LAZY加載更加可取。
因此,我仍然懶惰地將'EntityB'映射到'A',通過Annotation說。通過手動加入,我模仿一個渴望的獲取? Doctrine會識別提取的數據並將其設置爲'EntityA'上的相應字段?這將是整潔... – Joshua
@Joshua其實經過多研究一些話題後,我發現我錯了。根據官方文檔:「一個連接(不管是內連接還是外連接)只要連接實體的字段出現在聚合函數之外的DQL查詢的SELECT部分中,就會變成」獲取連接「。否則,它是一個「常規加入」。# – Mark
@Joshua今天我會研究一下這個話題,並提出一個不同的解決方案。 – Mark