2016-05-02 2 views
0

У меня есть следующие Propel условие:Использование Propel addCond, чтобы проверить, является ли запись NULL

->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 пытается вставить значение, когда Criteria Я выбрал ISNULL? Что я делаю не так?

ответ

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(); 
Смежные вопросы