Yii2 AR查询,Where多条件查询详解,输出当前sql
$query = $model->find()->where([’status’=>1]);
echo $query->createCommand()->getRawSql();
AR查询
$model->find()->all(); //返回所有数据;
$model->findOne($id); //返回 主键 id=1 的一条数据;
$model->find()->select(['id','title'])->all(); //返回指定字段数据
$model->find()->where([’name’ => ’名称’])->one(); //返回 [’name’ => ’小伙儿’] 的一条数据;
$model->find()->where([’name’ => ’名称’])->all(); //返回 [’name’ => ’小伙儿’] 的所有数据;
$model->find()->orderBy(’id DESC’)->all(); //排序查询;
$model->findBySql(’SELECT * FROM user’)->all(); //用 sql 语句查询 user 表里面的所有数据;
$model->findBySql(’SELECT * FROM user’)->one(); //用 sql 语句查询 user 表里面的一条数据;
$model->find()->andWhere([’sex’ => ’男’, ’age’ => ’24’])->count(’id’); //统计符合条件的总条数;
$model->find()->andFilterWhere([’like’, ’name’, ’名称’]); //用 like 查询 name 等于 小伙儿的 数据
$model->find()->one(); //返回一条数据;
$model->find()->all(); //返回所有数据;
$model->find()->count(); //返回记录的数量;
$model->find()->average(); //返回指定列的平均值;
$model->find()->min(); //返回指定列的最小值 ;
$model->find()->max(); //返回指定列的最大值 ;
$model->find()->scalar(); //返回值的第一行第一列的查询结果;
$model->find()->column(); //返回查询结果中的第一列的值;
$model->find()->exists(); //返回一个值指示是否包含查询结果的数据行;
$model->find()->batch(10); //每次取 10 条数据
$model->find()->each(10); //每次取 10 条数据, 迭代查询
Join关联
$_list = $model::find();
$_list->select(['f.id','f.dateline','n.itemid','n.title']);
$_list->from(News::tableName() . ' as f');
$_list->where(['f.userid'=>5]);
$_list->joinWith('newsTitle as n' , false, 'LEFT JOIN');
where查询条件总结
1. static where( $condition )
其中参数 $condition类型为字符串或者数组1、字符串字符串是最简单的,直接按sql中的where条件写就可以,如
$condition = ’name=’zhidemy.com’ and age>10’;
2. 如果是数组的情况下,有两种格式的写法。
[’type’ => 1, ’status’ => 2] //生成 (type = 1) AND (status = 2)
[’id’ => [1, 2, 3], ’status’ => 2] //生成 (id IN (1, 2, 3)) AND (status = 2)
[’status’ => null] //生成 status IS NULL
3. AND 把所有的操作数连接起来。
or和and类似,只不过是用OR来连接操作数。注意:这个方法不会对进行引用或者编码操作。[’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)
4. between 第一个操作数是列的名称,第二个和第三个操作数为范围的最小值和最大值。
not between:和between相似。[’between’, ’id’, 1, 10] //生成 id BETWEEN 1 AND 10
5. in 第一个操作数为列或者DB表达式,第二个操作数为数组
not in和in相似。注意:这个方法会对列进行引用,对数组中的值也会编码。[’in’, ’id’, [1, 2, 3]] //生成 id IN (1, 2, 3)
6. like 第一个操作数为列或者DB表达式,第二个操作数为字符串或者数组如
[’like’, ’name’, ’tester’] //生成 name LIKE ’%tester%’
如果值是数组的话,会生成多个like语句,并用AND来连接。如
[’like’, ’name’, [’test’, ’sample’]] //生成 name LIKE ’%test%’ AND name LIKE ’%sample%’
注意:这个方法会对列进行引用,对数组中的值也会编码。有时候你可能需要自己来处理%,那么可以用第三个参数:
[’like’, ’name’, ’%tester’, false] //生成 name LIKE ’%tester’
or like 和 like 相似,只是在第二个参数为数组的情况下用or来连接多个like 语句。
not like和 like 相似。
or not like 和or like相似。