2011-10-12 11 views
5

में पैरामीटर में एक सरणी के साथ एक देशी क्वेरी का उपयोग कर सकते मैं इस देशी एसक्यूएल सिद्धांत मेंमैं Doctrine2

SELECT COUNT(DISTINCT t.int_task_type_id) as a_count 
FROM tbl_xref_people_task t 
WHERE t.bit_completed = true AND 
     t.int_people_id = :peopleId AND 
     t.int_task_type_id IN (:taskType) 

मैं देशी एसक्यूएल में यह लिखने के लिए क्योंकि int_task_type_id एक पदानुक्रमित मॉडल में discriminator स्तंभ है लिखा है कक्षा।

समस्या यह है कि मैं ऐसा नहीं कर सकते है निम्नलिखित:

$query->setParameter(':taskType', implode(', ',$taskType)); 

या इस:

$query->setParameter(':taskType', $taskType, 'array'); 

मैं यह कैसे हल कर सकते हैं?

उत्तर

0

मुझे लगता है कि आप का उपयोग करके आसानी ऐसा कर सकते हैं:

$query->setParameter('taskType', $taskType);

सिद्धांत स्वचालित रूप से उचित प्रारूप में $taskType परिवर्तित कर देंगे।

+0

नहीं इस मामले में, यह स्ट्रिंग के लिए सरणी को बदलने के बारे में शिकायत। –

1

मामले में यह दूसरों में मदद करता है:

मैं सिर्फ सिद्धांत 2.0.5 (ish) का उपयोग कर एक पुराने Zend 1.11 निर्माण के साथ इस समस्या में ठोकर खाई है। मैंने पाया कि उपर्युक्त मेरे पीडीओ कनेक्शन के साथ काम नहीं करता है। मेरा मानना ​​है कि पीडीओ पैरामीटर के चारों ओर उद्धरण जोड़ रहा है और इसलिए आप ऊपर का उपयोग नहीं कर सकते हैं।

केवल दृष्टिकोण मैं ने पाया है कि काम करता है:

$types = []; 
$binds = []; 
$values = []; 

foreach ($taskTypes as $taskType) { 
    $types[] = \PDO::INT; 
    $binds[] = '?'; 
    $values[] = $taskType; 
} 
// Get Entity Manager from wherever 
$conn = $entityManager->getConnection(); 
$stmt = $conn->executeQuery("SELECT COUNT(DISTINCT 
    t.int_task_type_id) as a_count 
    FROM tbl_xref_people_task t 
    WHERE t.bit_completed = true AND 
    t.int_people_id = :peopleId AND 
    t.int_task_type_id IN (" . implode(',', $binds) . ")", 
    $values, 
    $types 
); 
$stmt->execute(); 
$stmt->fetchAll(); // Fetch 
संबंधित मुद्दे