2013-03-17 87 views
1

即時查找方式,如何將查詢生成器結果轉換爲關聯數組。但我需要的是包括來自另一個表的關係數據。 如果我使用getArrayResult()方法,它給了我一個數組,但沒有外鍵。我需要包含嵌套數組的外鍵與關聯數據庫表的數據。 編輯: 這裏是我的代碼:將查詢生​​成器結果轉換爲關聯數組

$qb = $this->_em->createQueryBuilder(); 
$qb->select('p'); 
$qb->from('XXX\MyBundle\Entity\Entity1', 'p'); 

$qb->leftJoin('p.FK1','u'); 
$qb->andWhere('u.Attr1 = :attr1'); 
$qb->setParameter('attr1', $appId); 
$qb->andWhere('u.Attr2 IS NULL'); 
$qb->leftJoin('u.FK2', 'v'); 
$qb->andWhere('v.Attr3 = :attr3'); 
$qb->andWhere('v.Attr4 IS NULL'); 
$qb->setParameter('attr3', $userId); 


$result = $qb->getQuery()->getArrayResult(); 

我需要這種轉換becouse SOAP的。它不能將複雜對象作爲實體的嵌套對象返回。

+0

能否請你告訴你的請求的代碼? – Gmajoulet 2013-03-17 13:53:51

+0

我編輯了我的問題。 – gavec 2013-03-17 15:48:50

回答

2

首先,你需要由於您使用的createQueryBuilder()方法,在你的Entity1Repository.php

寫此功能,您不需要使用select和方法。 在您的示例中,您正在編寫連接,但不要求查詢返回這些連接。

試試這個代碼:

<?php 

namespace XXX\\MyBundle\Entity; 

use Doctrine\ORM\EntityRepository; 

class Entity1Repository extends EntityRepository 
{ 
    public function getEntityWithJoins() 
    { 
     return $this 
      ->createQueryBuilder('p') 
      ->addSelect('u') 
      ->addSelect('v') 
      ->leftJoin('p.FK1','u') 
      ->andWhere('u.Attr1 = :attr1') 
      ->setParameter('attr1', $appId) 
      ->andWhere('u.Attr2 IS NULL') 
      ->leftJoin('u.FK2', 'v') 
      ->andWhere('v.Attr3 = :attr3') 
      ->andWhere('v.Attr4 IS NULL') 
      ->setParameter('attr3', $userId); 
      ->getQuery() 
      ->getArrayResult(); 
    } 
} 
+0

非常感謝。但是接下來的問題是它只返回一個外鍵的嵌套數組,但在一個表中有兩個FK,而第二個不在數組中; – gavec 2013-03-17 14:51:20

+0

我明白了......我必須創建一個左邊的聯盟,但我不知道如何,對於表中的第二個FK。 – gavec 2013-03-17 15:02:49

+0

只需添加leftJoin和addSelect ...問題是什麼? – Gmajoulet 2013-03-17 15:32:49