2014-01-30 31 views
0

以下是我的查詢:如何在Doctrine2中使用createQueryBuilder嵌套兩個AND查詢?

$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; 

,我想下面的查詢:

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) 

回答

0

你的SQL只是1查詢,所以不知道你想什麼窩。但是,請嘗試以下操作:我

$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(); 

注意如何在link_requestsReceiverUser前取出$。我也從$user1_id發了一個參數,這可以防止SQL injections

+0

謝謝你。我是這樣做的\t'$ em = \ Zend_Registry :: get('em'); \t \t $ qb_1 = $ em-> createQueryBuilder(); \t \t $ Q_1 = $ qb_1->選擇( 'link_req') \t \t - >從( '\實體\ link_requests', 'link_req') \t \t - >其中( 'link_req.is_confirmed = 1') \t \t - > andWhere( 'link_req.link_requestsRecieverUser =' $ user1_id.'OR link_req.link_requestsRecieverUser = '$ user2_id。 \t \t - > andwhere(。)'。link_req.link_requestsSenderUser =」 $ user1_id.'OR link_req.link_requestsSenderUser = 。」 $ user2_id); \t \t \t $ result = $ q_1-> getQuery() - > getResult(\ Doctrine \ ORM \ Query :: HYDRATE_ARRAY); \t \t $ em-> getConnection() - > close(); \t \t return true;' – Simer