如何在Doctrine或ORM中实现复杂的SQL查询

问题描述:

我使用的是Symphony 2.3.3,它是Doctrine和ORM的新增功能。我读了很多关于教义实体管理器,DBAL,DQL等。我有以下查询,我已经在SQL中构建,现在想通过使用上述任何方法来实现它,即简单。如何在Doctrine或ORM中实现复杂的SQL查询

select su.sensor_id, su.user_id 
, usr.contact_id, usr.enabled as user_status 
, ctct.Email1, ctct.Email2, ctct.active as contact_status, ctct.contacttype_id 
, ctctty.`type` as contact_type, ctctty.active as contact_type_status 
from sensor_users su, `Users` usr, contacts ctct, contact_types ctctty 
where su.user_id = usr.id 
and usr.contact_id = ctct.id 
and ctct.contacttype_id = ctctty.id 
and usr.enabled = 'Y' 
and ctct.active = 'Y' 
and ctctty.active = 'Y' 
and su.sensor_id = 123; 

有关如何使用它的早期答复。对于DBAL,如何从parameters.yml获取连接。

问候。

$em = $this->getDoctrine()->getEntityManager(); 
$query = $em->createQuery(
    'SELECT p 
    FROM AcmeStoreBundle:Product p 
    WHERE p.price > :price 
    ORDER BY p.price ASC' 
)->setParameter('price', '19.99'); 

$products = $query->getResult(); 

这是一个来自symfony文档的简单例子。你可以用dql查询来做你想做的事情。

+0

非常感谢ybert。我得到了这个例子,但这与我的复杂查询无关。因为我想将上述查询改为DQL。任何人都可以发送包含连接的整个工作示例的链接。 –

$query = $em->createQuery(
'SELECT su, usr, ctct, ctctty 
FROM Yoursensor_usersClass su 
JOIN su.YourfieldToJoinUser usr 
JOIN usr.yourFielToJoinContacts ctct 
JOIN ctct.yourFieldToJoinContactType ctctty 
WHERE usr.enabled = :y 
and ctct.active = :y 
and ctctty.active = :y 
and su.sensor_id = :nb' 
)->setParameter(array(
'y' => 'Y', 
'nb' => '123')); 

应该是这样的。只需替换管理您的dbs表的实体即可。