2017-05-08 102 views
-1

我一直在工作一些dql問題的一些日子。在查詢生成器Dql

在我的模型中,y有2個實體(機器和實例)。是一對多的關係,所以一個機器可以有很多實例,一個實例只能有一臺機器。

現在,我想要獲得所有具有一些實例的機器。在正常DQL我得到它正常工作,這樣的:

$ids = array(...) 
$dql = "select M from AppBundle:Machine M INNER JOIN AppBundle:Instancia I WITH M.id = I.machine WHERE I.software IN (:ids)"; 
$query = $em->createQuery($dql)->setParameter('ids', $ids); 
$maquinas = $query->getResult(); 

但是,當我想在QueryBuilder的我沒有得到它的工作來翻譯。我正在嘗試一些方法:

//First way 
$qb = $this->createQueryBuilder("M") 
->innerJoin('Instancia', 'I', 'WITH', 'M.id = I.machine') 
->where('I.software IN (:ids)') 
->setParameters('ids', $ids);  
$maquinas = $qb->getQuery()->getResult(); 

//Second way 
$qb = $this->createQueryBuilder("x") 
->select('M') 
->from('AppBundle:Machine', 'M') 
->innerJoin('Instancia', 'I', 'WITH', 'M.id = I.machine') 
->where('I.software IN (:ids)') 
->setParameters('ids', $ids);  
$maquinas = $qb->getQuery()->getResult(); 

我的過錯是什麼?

哪種方式更快,簡單的dql或querybuilder?

非常感謝!

+0

你得到任何錯誤? –

+0

我得到這個錯誤:致命錯誤:在非對象上調用__clone方法 – Angel

+0

可能有任何可能在dql語句中添加where子句? 我的意思是例如: $ dql =「從AppBundle中選擇M:Maquina M INNER JOIN AppBundle:Instancia I WITH M.id = I.maquina」; $ query = $ em-> createQuery($ dql); $ query-> where(「I.software IN(:ids)」); $ query-> setParameter('ids',$ ids); – Angel

回答