简体   繁体   English

如何使用createQueryBuilder在Doctrine2中嵌套两个AND查询?

[英]how can i nest two AND queries in Doctrine2 using createQueryBuilder?

following is my query : 以下是我的查询:

$em = \Zend_Registry::get('em');
    $qb_1 = $em->createQueryBuilder();
    $q_1 = $qb_1->select('link_req')
    ->from('\Entities\link_requests','link_req')
    ->where( 'link_req.is_confirmed = 1' )
    ->andWhere('link_req.$link_requestsSenderUser='.$user1_id .'or'.' link_req.$link_requestsSenderUser='.$user2_id)
    ->andWhere('link_req.$link_requestsReceiverUser='.$user1_id .'or'.' link_req.$link_requestsReceiverUser='.$user2_id);
    $result= $q_1->getDql();
    echo $result;

and i want following query: 我想要以下查询:

SELECT * FROM [fb_local].[dbo].[link_requests]  
WHERE is_confirmed = 1 AND (request_user_id = 12  or request_user_id=19) AND (accept_user_id = 12 or  accept_user_id = 19)

Your SQL is just 1 query, so not sure what you're trying to nest. 您的SQL只是1个查询,因此不确定您要嵌套的内容。 But try the following: 但是,请尝试以下操作:

$em = \Zend_Registry::get('em');
    $qb_1 = $em->createQueryBuilder();
    $q_1 = $qb_1->select('link_req')
        ->from('\Entities\link_requests','link_req')
        ->where( 'link_req.is_confirmed = 1' )
        ->andWhere('link_req.link_requestsSenderUser=:user_id or link_req.link_requestsSenderUser=:user_id')
        ->andWhere('link_req.link_requestsReceiverUser=:user_id or link_req.link_requestsReceiverUser=:user_id');
    $q_1->setParameter('user_id', $user1_id);
    $query = $q_1->getQuery();
    echo $query->getSql();

Notice how I removed the $ in front of link_requestsReceiverUser . 注意我是如何取出$前面link_requestsReceiverUser I also made a parameter from $user1_id , this prevents SQL injections . 我还从$user1_id了一个参数,这可以防止SQL注入

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM