在YII1.1.*中,如何找到属性为CActiveRecord的所有数据(通过NULL实现),类似于:
Foo::model()->findAllByAttributes(['bar' => 'baz', 'qux' => [null, '']]);它不工作,因为它生成查询:
WHERE (bar = 'baz') AND (qux IN (, ''))
我想找到所有的Foo记录where
"bar"字段等于"baz"AND qux字段IS NULL或等于空字符串我可以用findAll,来做这件事,但是如果我想要使用findAllByAttributes方法呢?谢谢。
发布于 2015-09-29 12:01:51
类似于:
$cityModel = Cities::model()->findAllByAttributes(array("citny_name"=>"d"), "state_id IS NULL OR state_id = ''");执行的查询:
SELECT * FROM `cities` `t` WHERE `t`.`citny_name`=:yp0 AND
(state_id IS NULL OR state_id = ''). Bound with :yp0='d'发布于 2015-09-29 12:01:06
您可以将quz的条件作为附加参数传递到findAllByAttributes:
Foo::model()->findAllByAttributes(['bar' => 'baz'], "quz IS NULL OR quz = ''")除非用自己的实现替换IN,否则不能在null值中使用CDbCommandBuilder。CActiveRecord::findAllByAttributes调用CDbCommandBuilder::createColumnCriteria,如果列值是数组,则调用CDbCommandBuilder::createInCondition。
从源代码值转换为列类型,然后引用并通过implode传递,导致null被视为php的null,而不是mysql的null
foreach($values as &$value)
{
$value=$column->typecast($value);
if(is_string($value))
$value=$db->quoteValue($value);
}
...
return $prefix.$column->rawName.' IN ('.implode(', ',$values).')';https://stackoverflow.com/questions/32841974
复制相似问题