2016-05-02 30 views
0

我有以下的Propel條件:使用的Propel addCond檢查條目是否是空

->addCond('cond3', 're.max_person_count', Criteria::ISNULL) 

這產生以下錯誤:Invalid text representation: 7 ERROR: invalid input syntax for integer: „NULL「

經仔細檢查,似乎生成的SQL是以下:

... (re.max_person_count=:p3 OR ... 

代替期望的:

... (re.max_person_count IS NULL OR ... 

爲什麼Propel試圖插入一個值,當我選擇的CriteriaISNULL?我究竟做錯了什麼?

回答

0

看來,使用Criteria::ISNULL產生一些無法預知的行爲,我無法解釋(相應生成的SQL嘗試沒有映射到IS NULL)。

下面是最終的結果,它的工作,我也希望(萬一有人需要回答過的問題):

$resQuery = ResQuery::create() 
     ->leftJoinTable('tbl') 
     ->addCond('cond1', 'tbl_id', $tableId, Criteria::EQUAL) 
     ->addCond('cond2', 'canceled', 'FALSE', Criteria::EQUAL) 
     ->combine(array('cond1','cond2'), 'AND', 'cond1and2') 
     ->addCond('cond3', 'tbl.max_count', null) 
     ->addCond('cond4', 'tbl.max_count', '0', Criteria::GREATER_THAN) 
     ->addCond('cond5', 'confirmed', 'TRUE', Criteria::EQUAL) 
     ->combine(array('cond4', 'cond5'), 'AND', 'cond4and5') 
     ->combine(array('cond3', 'cond4and5'), 'OR', 'cond3or4and5') 
     ->where(array('cond1and2', 'cond3or4and5'), 'AND') 
     ->find();