[英]How to retrieve foreign keys using Doctrine 2 Query Builder when the result is hydrated as an array?
[英]Why is my result array with a hydrated associated entity shaped differently using query builder vs createQuery?
Doctrine 的文檔描述了兩種獲取 select 記錄及其關系的方法,一種使用“獲取連接”,另一種不使用:
獲取地址的連接:
<?php
$query = $em->createQuery("SELECT u, a FROM User u JOIN u.address a WHERE a.city = 'Berlin'");
$users = $query->getResult();
當 Doctrine 使用 fetch-join 組合查詢時,它會在結果數組的根級別的 FROM 子句中返回 class。 在前面的示例中,返回了一個 User 實例數組,每個用戶的地址都被提取並保存到 User#address 變量中。 如果訪問地址 Doctrine 不需要延遲加載與另一個查詢的關聯。
檢索 ForumUser 及其單個關聯實體:
<?php
$query = $em->createQuery('SELECT u, a FROM ForumUser u JOIN u.avatar a');
$users = $query->getResult(); // array of ForumUser objects with the avatar association loaded
echo get_class($users[0]->getAvatar());
當我使用查詢構建器時,它的執行方式類似於獲取連接,並且我收到一個包含所有用戶的數組以及其根中的關聯。 喜歡:
$qb = $this->em->createQueryBuilder()
->select('u')
->from(User::class, 'u');
$qb->join(Address::class, 'a', Join::WITH, 'u.a = a');
$qb->addSelect('a');
// Returns
$result = [
'user' => // User
'address' => // Address
];
正如預期的那樣,用戶 object 的地址也被水化了。
但是我不想要這個,我希望它的形狀像第二個例子:一個只有用戶的數組,地址只能通過用戶 object 訪問。我可以簡單地過濾數組以獲得所需的形狀,但我覺得那是由於我缺乏理解而采取的解決方法。
是否可以使用查詢構建器來獲得形狀類似於上面第二個示例的結果數組? 或者我是否必須為此過濾結果數組? 令我困惑的是,兩者生成的實際 SQL 是相同的!
我來自 Laravel 和 Doctrine 對我來說是全新的,所以請原諒我在這個問題上的天真。 如果我需要澄清任何事情,請告訴我。
謝謝!
我想我在相關問題部分找到了答案: Symfony2 query builder joins to get objects as a single array
您應該加入協會,而不是加入實體的完全限定名稱。 所以查詢變成:
SELECT hs,s,h
FROM \App\SoBundle\Entity\HandsetSubscription hs
JOIN hs.subscription s with s.id = hs.subscription
AND s.mins = 150
AND s.mb = 250
AND s.sms = 150
JOIN hs.handset h with h.id = hs.handset
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.