-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?
非常感謝!
你得到任何錯誤? –
我得到這個錯誤:致命錯誤:在非對象上調用__clone方法 – Angel
可能有任何可能在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