如何在 YII2 中使用非空条件
Posted
技术标签:
【中文标题】如何在 YII2 中使用非空条件【英文标题】:how to use not null condition in YII2 【发布时间】:2015-06-30 00:54:46 【问题描述】:嗨,我想在我的 yii2 查询中使用非空条件,我应该如何使用它。 我不希望城市和州为空。
我的查询是
$query = new Query;
$query->select('ID, City,State,StudentName')
->from('student')
->where(['IsActive' => 1])
->orderBy(['rand()' => SORT_DESC])
->limit(10);
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => false,
]);
【问题讨论】:
哪些字段不应该为空? 我不希望城市和州为空。 【参考方案1】:其中一个选项是:
$query = new Query;
$query->select('ID, City,State,StudentName')
->from('student')
->where(['IsActive' => 1])
->andWhere(['<>', 'City', null])
->andWhere(['<>', 'State', null])
->orderBy(['rand()' => SORT_DESC])
->limit(10);
查看where的官方文档。
【讨论】:
你在''之后缺少了"," @llioor 谢谢,已修复。顺便说一句,你也可以建议编辑。 我不能,因为它只有 1 个字符可以更改。 TW,您也忘记了前一行中的“,”。 这个查询是错误的。在 SQL 中,不能使用比较运算符来比较 NULL 值。正确的方法是使用“IS NULL”或“IS NOT NULL”条件。【参考方案2】:您可以使用not
运算符结合不应为空的字段来生成IS NOT NULL
SQL 语句。像这样:
$query = new Query;
$query->select('ID, City,State,StudentName')
->from('student')
->where(['IsActive' => 1])
->andWhere(['not', ['City' => null]])
->andWhere(['not', ['State' => null]])
->orderBy(['rand()' => SORT_DESC])
->limit(10);
还可以查看documentation 中的示例。
【讨论】:
不生成“IS NOT NULL”,生成“NOT (City IS NULL)”。 @mariovials 的答案是正确的。【参考方案3】: $items = BadOffer::find()->where(['OR',
['IS', 'moderator_id', (new Expression('Null'))],
['moderator_id' => $user->id],
]);
【讨论】:
【参考方案4】:->where(['IS NOT', 'column', null]);
得到
WHERE column IS NOT NULL
你也可以用,打字比较快
->where('column IS NOT NULL')
在复杂查询中
->where(['AND',
'column1 IS NOT NULL', // works
['IS NOT', 'column2', null], // works
['column3' => $value],
)
【讨论】:
【参考方案5】:使用->andWhere(['not', ['State' => null]])
或->andWhere(['is not', 'State', null]);
不要用:
andFilterWhere
,因为 null
将使此过滤器被忽略
->andWhere(['<>', 'State', null])
形成查询 AND State <> null
【讨论】:
【参考方案6】:在 Yii2 中,我们可以使用以下任何查询来验证 null 条件,
->andWhere(['NOT', ['city' => null]]);
或
->andWhere(['<>', ['city' => null]]);
或
->andWhere('city IS NOT NULL');
【讨论】:
【参考方案7】:如何在 mysql 中选择非空列?
使用 LENGTH :
SELECT col1
FROM table
WHERE LENGTH(col1) > 0
Yii2:
->andWhere(['>', 'LENGTH(col1)', 0])
【讨论】:
【参考方案8】:这对我有用,但仅当将 null 作为字符串传递时
->andFilterWhere(['<>', '`city`', 'null']);
【讨论】:
这可能只是偶然的——它会创建像city <> 'null'
这样的条件,它可能会忽略空值(尽管它可能取决于DBMS),但也会忽略值null
作为字符串的字段。跨度>
以上是关于如何在 YII2 中使用非空条件的主要内容,如果未能解决你的问题,请参考以下文章
Yii2 : Active Record 添加 Not In 条件