2011-05-04 74 views
1

通常我只是懶加載我的實體,但現在我需要創建一個能夠將節點作爲數組獲取的DQL。我嘗試了好幾種查詢,但我不能得到它的工作,下面是兩個示例:DQL - 讀取相關實體

// example one 
$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType INSTANCE OF ?1') 
    ->setParameter(1, $type)->getArrayResult(); 
// example two 
$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType_id = ?1') 
    ->setParameter(1, $type->id)->getArrayResult(); 

林不知道實際上什麼實例時,但它沒有工作,使用nodeType_id沒有工作或者是因爲我的註釋沒有隻有數據庫表的nodeType_id。

那麼對此有什麼正確的方法?

回答

0

我不得不使用等號是這樣的:

$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType = ?1') 
    ->setParameter(1, $type->id)->getArrayResult(); 

其中類型是另一個實體。

+0

如果你的答案有效 - 太好了!如果在nodeType上需要其他條件,那麼更一般的情況是使用連接:''SELECT n FROM Entities \ Node n JOIN n.nodeType nt WHERE nt.id =?1'and nt.someOtherProperty =?2'' – rojoca 2011-05-05 15:28:45

2

什麼是nodeType?如果它只是一個字符串,那麼你只需要:

$this->em 
    ->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType = ?1') 
    ->setParameter(1, $type) 
    ->getArrayResult(); 

如果您使用繼承和你想要一個特定類型的節點,然後使用:

$this->em 
    ->createQuery("SELECT n FROM Entities\Node n WHERE n INSTANCE OF $type") 
    ->getArrayResult(); 

注$類型應該是這樣的:$type = 'Entities\Nodes\NodeSubclass' 。您不能將其添加爲參數。

+0

NodeType是另一個實體,我有節點和nodeType之間的ManyToOne關係 – Dennis 2011-05-05 06:17:48