2014-02-19 63 views
0

我查詢DQL是:如何使用獲得相關表的對象

$query = $this->_em->createQuery(

    'SELECT v, a 
    FROM MyBundle:Products v 
    JOIN v.category a WITH a.id = :id 
    WHERE v.main = 1' 
) 
->setMaxResults(1) 
->setParameters(array('id' => $id)); 



$result = $query->getOneOrNullResult(); 

var_dump($result->getCategory()->getId()); 

,能不能請sombody解釋我爲什麼的var_dump沒有返回值(白頁)?我花了很多時間解決這個問題,但我不明白,這種行爲的原因是什麼。

我知道,我只能選擇id類別表我需要類別的孔對象。上面的查詢只是示例,不返回任何ID。

或者還有另一種獲取相關表的對象的方法嗎?

+0

讓我看看你的錯誤日誌。啓用錯誤報告應解決白頁問題; ) – NHG

+0

沒有什麼,在日誌和錯誤報告中設置爲E_ALL。我不知道,如果原因是對象太大。無論如何,這是奇怪的:/ – gavec

+0

沒有var_dump輸出?也許一個異常導致你在別處執行?嘗試設置ini值error_reporting爲true並關閉輸出緩衝? – enterx

回答

0

感謝您的答覆。我發現了問題,這是在我的垃圾箱裏。但只有在這種情況下,當我傾倒大件物品時,與我的關係實體一樣。 Skript停住了它,或者什麼也不會繼續。所以當我刪除這些轉儲時,它可以正常工作。

也許,對於傾銷大型對象可行的解決方案,可能在Enterx的評論中,但我不能嘗試它,因爲我的應用程序在遠程服務器上,我無法訪問php.ini。

0

首先,實體的名稱是否爲Products而不是Product

其次,檢查category的逆映射設置是否正確。

我只是嘗試了一個簡單的例子,用完全相同的用例,它工作正常。

$em = $this->get('doctrine')->getEntityManager(); 
$query = $em->createQuery(
     'SELECT p, c 
     FROM TestTestBundle:P p 
     JOIN p.children c WITH c.id = :id 
     WHERE p.main = 1' 
    ) 
    ->setMaxResults(1) 
    ->setParameters(array('id' => $id)); 

if (null !== $result = $query->getOneOrNullResult()) { 
    foreach ($result->getChildren() as $child) { 
     var_dump($child->getTitle()); 
    } 
} 

像NHG說的那樣,並啓用錯誤報告,以便我們得到一個錯誤的提示。

下面是使用的兩個實體的ORM映射。

家長

class P 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Test\TestBundle\Entity\C", mappedBy="parent") 
    */ 
    private $children; 

    public function getChildren() 
    { 
     return $this->children; 
    } 

的兒童

class C 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Test\TestBundle\Entity\P", inversedBy="children") 
    */ 
    private $parent; 
相關問題