2011-10-12 240 views
5

使用本機查詢與數組中的參數我有這樣的原生SQL編寫的教義我怎樣才能在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) 

我必須把它寫在本地SQL因爲int_task_type_id在一個分層的模型鑑別列類。

的問題是,我不能做到以下幾點:

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

或本:

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

我該如何解決這個問題?

回答

0

我想你可以通過使用做到這一點很容易:

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

學說將自動轉換成$taskType正確的格式。

+0

在此情況下,它抱怨改變數組的字符串。 –

1

在這種情況下幫助別人:

剛纔我偶然到了這個問題,使用Doctrine 2.0.5(ISH)的舊Zend的1.11版本。我發現上述不適用於我的PDO連接。我相信PDO在參數上加了引號,所以你不能使用上面的。

我發現的唯一辦法,工作原理是:

$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