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

时间:2013-08-28 12:16:13

标签: sql symfony orm doctrine dbal

我使用的是Symphony 2.3.3,是Doctrine和ORM的新手。我阅读了很多关于doctrine实体管理器,DBAL,DQL等的内容。我有以下查询,我在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获得连接。

问候。

2 个答案:

答案 0 :(得分:0)

$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查询做你想做的事。

答案 1 :(得分:0)

$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表的实体。