Leo Code

主页 > PHP > Yii2 中QueryInterface类库的几项常用where操作 如:like/in等

Yii2 中QueryInterface类库的几项常用where操作 如:like/in等

Yii2中已经内置了多种数据库CRUD的操作,有些很方便,而且也比较安全,例如,我们常用的数据库in查找,PDO并不能使用占位符这种防注入的功能,但是Yii2的一些方法已经帮我们过滤了这些危险的注入漏洞。总结一些常用的where()方法。

// 大致语句如下,我们主要就是演示一下where()中的参数
$customers = Customer::find()
    ->where(['status' => Customer::STATUS_ACTIVE])
    ->orderBy('id')
    ->all();

// 注释部分就是我们通常使用的SQL语句
['and', 'id=1', 'id=2'] // id=1 AND id=2
['and', 'type=1', ['or', 'id=1', 'id=2']] // type=1 AND (id=1 OR id=2)
['in', 'id', [1, 2, 3]] // id IN (1, 2, 3)
['between', 'id', 1, 10] // id BETWEEN 1 AND 10
['not', ['attribute' => null]] // NOT (attribute IS NULL)
['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]] //(type IN (7, 8, 9) OR (id IN (1, 2, 3)))
['like', 'name', 'tester'] // name LIKE '%tester%'
['like', 'name', ['test', 'sample']] // name LIKE '%test%' AND name LIKE '%sample%'
['like', 'name', '%tester', false] // name LIKE '%tester'
['exists', (new Query())->select('id')->from('users')->where(['active' => 1])] // EXISTS (SELECT "id" FROM "users" WHERE "active"=1)
['>=', 'id', 10] // id >= 10

// 还有 andWhere() 类似于 AND 查找 常用语两个复杂条件的并列或者追加条件
$query->where(['status' => 1]);
if(isset($keyword)){
    $query->andWhere(['in', 'id', [1, 2, 3]]);
}

// orWhere() 类似于 OR 查找 使用方法同andWhere()