在Yii 1.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
方法呢?感谢。
答案 0 :(得分:3)
类似的东西:
$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'
答案 1 :(得分:1)
您可以将quz
的条件作为附加参数传递到findAllByAttributes
:
Foo::model()->findAllByAttributes(['bar' => 'baz'], "quz IS NULL OR quz = ''")
除非您使用自己的实现替换IN
,否则不能将null
与CDbCommandBuilder
值一起使用。 CActiveRecord::findAllByAttributes
调用CDbCommandBuilder::createColumnCriteria
,如果列值是数组,则调用CDbCommandBuilder::createInCondition
。
从source code值转换为列类型并在之后引用并传递implode
,导致null
被视为php的null
而不是mysql的{{1} }}:
null