2011-10-10 8 views
5

मेरी क्वेरी doctirne 2. मेरे पास उपयोगकर्ताओं, निजी या सार्वजनिक में एक स्थिति फ़ील्ड है। मैं इस क्वेरी चलाने और सभी टिप्पणियां जहां स्थिति = सार्वजनिक और निजी केवल तभी userid = वर्तमान प्रयोक्ता आईडी में लॉग इन किया है (जो मुझे पता है, $ loggerUserVarID)सिद्धांत 2 - प्रश्न निर्माता सशर्त प्रश्न ... यदि बयान?

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->leftJoin('c.users', 'u') 
      ->where('status = public') ??? display all public comments but private if it belpongs to the logged in user.? 
      ->setParameter(1, $loggerUserVarID) 
      ->getQuery(); 

पल में प्रदर्शित करने के लिए सक्षम होना चाहते हैं , मैं आपको परिणाम प्राप्त करने के बाद एक if स्टेटमेंट का उपयोग कर रहा हूं, क्या इस क्वेरी के अंदर कोई कथन करने का कोई तरीका है?

+0

क्या परेशान:

कुछ की तरह क्या आप शायद चाहते हैं? कैसे काम करने जा रहा है? एक टिप्पणी कर सकते हैं सिर्फ एक मालिक (उपयोगकर्ता) है? – Max

उत्तर

8

तो, आप टिप्पणियां वापस लौटना चाहते हैं "यदि स्थिति 'सार्वजनिक है या मालिक आईडी $UUERVARID है", है ना?

ध्यान दें कि अगर $ logUserVarID मालिक से मेल खाता है, तो आपको वास्तव में स्थिति की परवाह नहीं है।

क्वेरीबिल्डर और डीक्यूएल दस्तावेज़ देखें। वे स्पष्ट रूप से स्पष्ट करते हैं कि जटिल परिस्थितियों को एक साथ कैसे रखा जाए। एक से अधिक उपयोगकर्ता एक टिप्पणी करने के लिए मैप किया जाता है का मतलब है - एक टिप्पणी एक उन संपत्ति है:

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->join('c.users', 'u') 
      ->where(
       $qb->expr()->orX(
        $qb->expr()->eq('status','public'), 
        $qb->expr()->eq('u.id',$loggedInUser) 
       ) 
      ) 
     ->setParameter(1, $loggerUserVarID) 
     ->getQuery(); 
संबंधित मुद्दे