2013-01-08 8 views
5

मेरे पास स्टेटस ऑब्जेक्ट्स का एक ऐरे चयन है जिसे अब मैं एक सिद्धांत क्वेरी के लिए WHERE खंड में IN पैरामीटर के रूप में उपयोग करना चाहता हूं। यहां मेरा प्रश्न कोड है:एक सिद्धांत क्वेरी में पैरामीटर के रूप में एक सरणीकरण का उपयोग

$query = $repository->createQueryBuilder('r') 
       ->join('r.applicationStatus', 's') 
       ->where('r.submitted IS NOT NULL') 
       ->andWhere('r.created >= :date')     
       ->andWhere('r.created < :date2') 
       ->andWhere('s IN (:status)') // Here's the In statement 
       ->orderBy('r.created', 'DESC')     
       ->setParameter('date', $appSearch->getDateFrom()) 
       ->setParameter('date2', $end) 
       ->setParameter('status', $appSearch->getApplicationStatus()) //Here's the array collection 
       ->getQuery(); 

हालांकि क्वेरी शून्य रिकॉर्ड लौटा रही है। इसके लिए काम करने के लिए मुझे $ appSearch-> getAplicationStatus() arraycollection के माध्यम से मैन्युअल रूप से पुन: प्रयास करना होगा और इस समय सही परिणामों को उत्पन्न करने के लिए क्वेरी के लिए स्थिति आईडी को एक नई सरणी में ले जाना होगा - जो बहुत अक्षम महसूस करता है।

मैं क्या गलत कर रहा हूं?

उत्तर

9

आप ऐसा ही कुछ करना चाहिए:

$statusId = array(); 

foreach ($appSearch->getApplicationStatus() as $status) { 
    $statusId[] = $status->getId(); 
} 

// ... Your query: 
->andWhere('s.id IN (:status)') 
->setParameter('status', $statusId) 

वास्तव में मुझे लगता है कि सिद्धांत एक वस्तु देकर कुछ फ़िल्टर नहीं कर सकते, यह तो आप का एक क्षेत्र का उपयोग करने की जरूरत है यह तुलना करने के लिए सक्षम नहीं है, इन वस्तुओं, यहां मेरे उदाहरण में आईडी ... और पूर्णांक की तुलना आपके डेटाबेस के लिए हल्का है!

+0

ArrayCollection वर्ग (बहुत सुविधाजनक) 'toArray' एक ही बात करने के लिए विधि है। – spdionis

+0

यह शर्म की बात है, क्योंकि सिद्धांत * एक ईक() तुलना के लिए पैरामीटर के रूप में ऑब्जेक्ट को स्वीकार कर सकता है, लेकिन ऐसा लगता है कि ऑब्जेक्ट्स की सरणी पसंद नहीं है। – darkbluesun

0

इसके काम ठीक contrioller में ठीक है।

$users = $em->getRepository('EventekUserBundle:User')->getQueryf($events->getSecretariats()->toArray()) ; 
repositroy में

=>

class UserRepository extends \Doctrine\ORM\EntityRepository 
{ 

    public function getQueryFromCollection($users) 
    { 
     $qb = $this->createQueryBuilder('u') 
      ->select('u') 
      ->andWhere('u in (:users)') 
      ->setParameter('users', $users); 
     return $qb->getQuery(); 
    } 
}