Yii2中 AR操作andWhere和andFilterWhere区别

Posted 关雎-二

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2中 AR操作andWhere和andFilterWhere区别相关的知识,希望对你有一定的参考价值。

附加条件

你可以使用 andWhere() 或者 orWhere() 在原有条件的基础上 附加额外的条件。你可以多次调用这些方法来分别追加不同的条件。 例如,

$status = 10;
$search = ‘yii‘;

$query->where([‘status‘ => $status]);

if (!empty($search)) {
    $query->andWhere([‘like‘, ‘title‘, $search]);
}

如果 $search 不为空,那么将会生成如下 SQL 语句:

... WHERE (`status` = 10) AND (`title` LIKE ‘%yii%‘)

过滤条件

当 WHERE 条件来自于用户的输入时,你通常需要忽略用户输入的空值。 例如,在一个可以通过用户名或者邮箱搜索的表单当中,用户名或者邮箱 输入框没有输入任何东西,这种情况下你想要忽略掉对应的搜索条件, 那么你就可以使用 yii\db\Query::filterWhere() 方法来实现这个目的:

// $username 和 $email 来自于用户的输入
$query->filterWhere([
    ‘username‘ => $username,
    ‘email‘ => $email,		
]);

yii\db\Query::filterWhere() 和 where() 唯一的不同就在于,前者 将忽略在条件当中的hash format的空值。所以如果 $email 为空而$username 不为空,那么上面的代码最终将生产如下 SQL ...WHERE username=:username

提示: 当一个值为 null、空数组、空字符串或者一个只包含空白字符时,那么它将被判定为空值。

类似于 [yii\db\Query::andWhere()|andWhere()]] 和 orWhere(), 你可以使用 yii\db\Query::andFilterWhere() 和yii\db\Query::orFilterWhere() 方法 来追加额外的过滤条件。

andWhere和andFilterWhere都可以用来追加条件,只是andFilterWhere会忽略条件中的空值

以上是关于Yii2中 AR操作andWhere和andFilterWhere区别的主要内容,如果未能解决你的问题,请参考以下文章

yii2需要给每张表建一个ar模型吗

YII2.0AR模式CURD

Yii2型铸造列为整数

yii2 数据库和ActiveRecord

Yii2 分页

Yii2查询语句使用不等于号