Mysql CActiveRecord按字段为空的属性查找
在Yii 1.1.*中,如何查找属性为空的所有数据(通过Mysql CActiveRecord按字段为空的属性查找,mysql,yii,yii-cactiverecord,cactiverecord,Mysql,Yii,Yii Cactiverecord,Cactiverecord,在Yii 1.1.*中,如何查找属性为空的所有数据(通过CActiveRecord实现),类似于: Foo::model()->findAllByAttributes(['bar' => 'baz', 'qux' => [null, '']]); 它不起作用,因为它产生查询:WHERE(bar='baz')和(qux IN(,'') 我想查找所有Foo记录where: “bar”字段等于“baz” 和qux字段为空或等于空字符串 我可以用findAll来做,但是如果我想使
CActiveRecord
实现),类似于:
Foo::model()->findAllByAttributes(['bar' => 'baz', 'qux' => [null, '']]);
它不起作用,因为它产生查询:WHERE(bar='baz')和(qux IN(,'')
我想查找所有Foo
记录where
:
字段等于“bar”
“baz”
和
字段qux
或等于空字符串为空
我可以用
findAll
来做,但是如果我想使用findAllByAttributes
方法呢?谢谢。您可以将quz
的条件作为附加参数传递到findAllByAttributes
:
Foo::model()->findAllByAttributes(['bar' => 'baz'], "quz IS NULL OR quz = ''")
除非用自己的实现替换CDbCommandBuilder
,否则不能将中的与null
值一起使用CActiveRecord::findAllByAttributes
调用,如果列值是数组,则依次调用
从中,值被强制转换到列类型中,然后被引用,并通过内爆
传递,导致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).')';
您可以将quz
的条件作为附加参数传递到findAllByAttributes
:
Foo::model()->findAllByAttributes(['bar' => 'baz'], "quz IS NULL OR quz = ''")
除非用自己的实现替换CDbCommandBuilder
,否则不能将中的与null
值一起使用CActiveRecord::findAllByAttributes
调用,如果列值是数组,则依次调用
从中,值被强制转换到列类型中,然后被引用,并通过内爆
传递,导致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).')';
比如:
$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'
比如:
$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'
谢谢,它很有效。你的解释很清楚。谢谢你,它起作用了。你的解释很清楚。执行的查询解释了很多事情。谢谢你,这很有效!执行的查询解释了很多事情。谢谢你,这很有效!