CActiveRecord按属性查找字段为空的位置

时间:2015-09-29 10:48:48

标签: mysql yii yii-cactiverecord cactiverecord

在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 方法呢?感谢。

2 个答案:

答案 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,否则不能将nullCDbCommandBuilder值一起使用。 CActiveRecord::findAllByAttributes调用CDbCommandBuilder::createColumnCriteria,如果列值是数组,则调用CDbCommandBuilder::createInCondition

source code值转换为列类型并在之后引用并传递implode,导致null被视为php的null而不是mysql的{{1} }}:

null