2013-04-17 16 views
0

我有一個包含多個orWhere語句的查詢。 PHP代碼如下所示:Doctrine_Query在Doctrine 1.2中出現奇怪的行爲

$firstDay = $params['datetimeForMonth']->format('Y-m-d'); 
$lastDay = $params['datetimeForMonth']->format('Y-m-t 23:59:59'); 
$whereStatement = "(s.level = ? 
    AND s.idForLevel IN (?) 
    AND s.startDatetime BETWEEN '$firstDay' AND '$lastDay')"; 
$q = Doctrine_Query::create() 
    ->from('Mmb_Model_Schedule s') 
    ->where($whereStatement, ['prefecture', $this->id]) 
    ->orWhere($whereStatement, ['district', $districtIds]) 
    ->orWhere($whereStatement, ['municipality', $municipalityIds]) 
    ->orWhere($whereStatement, ['workplace', $workplaceIds]) 
    ->orWhere($whereStatement, ['user', $userIds]); 

變量$ districtIds,$ municipalityIds,$ workplaceIds,和$用戶id都被定義的時間提前爲逗號分隔值。

此查詢對除區域ID以外的每個級別都適用。查詢中不會返回任何等級爲「區域」的記錄。

什麼是真正奇怪的是,如果我不使用綁定參數,而是插入下面的代碼,一切正常:

->orWhere("s.level = 'district' AND s.idForLevel IN ($districtIds) AND s.startDatetime BETWEEN '$firstDay' AND '$lastDay'") 

什麼是更令人氣憤的是,即使這個查詢本身所做的一切作爲如果我使用綁定參數,則單個where語句(不包括所有其他語句)也不會提供任何內容。

而且如果這還不夠,我甚至試着更新表格將'區'更改爲'prefDistrict',以防萬一'區'這個詞引起問題。沒有改變。

儘管我將直接輸入它們的EXACT SAME數據作爲綁定參數插入,但這種行爲發生了顯着變化。這裏發生了什麼?

回答

0

我想說的是在$districtIds變量的值中必須有一些東西在使用Doctrine中的查詢生成器。你能發表一個這些值的樣本嗎?

另外,你看過生成的SQL準則運行(無論是拖尾SQL日誌,或掛鉤preExecute事件)?我很好奇看到類似的東西的輸出。

(這可能應該是一個評論,但我的聲望不夠高;))

+0

他們只是整數值。 – blainarmstrong

相關問題