2012-07-28 10 views
22

मैं एक QueryBuilder इसपास सरणी() -> orx() विधि

[QUERY]... AND WHERE e.type = x OR e.type = Y OR e.type = N [...] 

मैं सरणी में प्रकार मैं अपने क्वेरी बिल्डर को यह सरणी पारित कर सकते हैं जैसे के साथ DQL का निर्माण करने की जरूरत है ?

$qb->andWhere($qb->expr()->orx(CONDITIONS)); 

प्रकार की सूची गतिशील हो जाएगा, प्रत्येक foreach प्रकार पाश पर $qb->andWhere बुला केवल अधिक कर देगा और जहां कोई अधिक अन्य रैंकों है।
क्या मैं orx अभिव्यक्तियों को गुणा कर सकता हूं और फिर इसे andWhere पर जोड़ सकता हूं? किसी भी विचार को हल करने के लिए, शायद, सामान्य समस्या?

उत्तर

5

मुझे पता था कि टॉममारो बेहतर दिन होगा। समाधान सरल है। आपका या भाव की सरणी तो

$ors[] = $qb->expr()->orx('e.type = '.$qb->expr()->literal($value)); 

की तरह कर सकते हैं और फिर बस andWhere()/कहाँ() के माध्यम से क्वेरी बिल्डर की विधि में जोड़ें ताकि तरह विधि में शामिल होने:

$qb->andWhere(join(' OR ', $ors)); 
1

आप भी कर सकते हैं call_user_func_array फ़ंक्शन like this का उपयोग करें।

यह आपको पैरामीटर के रूप में सरणी के आइटम को पास करने की विधि को कॉल करने देता है।

50

मैं बहुत है, तो मैंने पाया उम्मीद इस:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); 
$orX = $qb->expr()->orX(); 

foreach ($conditions as $condition) { 
    $orX->add($condition); 
} 

$qb->add('where', $orX); 

@meze सुझाव का उपयोग करके आप कोड को सरल बनाने और साथ foreach बयान की जगह ले सकता:

$orX->addMultiple($conditions); 
+16

प्रत्येक दिन पहले की तुलना में बेहतर है, foreach साथ बदला जा सकता '$ orX-> जोड़ें अनेक ($ स्थितियां); ' – meze

+1

मैंने समुदाय विकी का जवाब बदल दिया है। @meze, आप अपने परिवर्तनों के साथ इसे संपादित करने के लिए आपका स्वागत है। – DEY

5

@DEY उसके जवाब सरलीकृत किया जा सकता है। foreach के लिए कोई ज़रूरत नहीं, यह भी काम करता है:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); 

$orX = $qb->expr()->orX(); 
$orX->addMultiple($conditions); 

$qb->where($orX); 
0

तुम भी ... php में की तरह उपयोग कर सकते हैं:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); 
$criteria = Criteria::create(); 
$criteria->andWhere(Criteria::expr()->orX(...$conditions)); 
संबंधित मुद्दे