Yii2 AR查询,Where多条件查询详解,输出当前sql

时间: 2017-02-12  分类: Yii2  收藏
AR查询输出当前查询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 把所有的操作数连接起来。

[’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)

or和and类似,只不过是用OR来连接操作数。注意:这个方法不会对进行引用或者编码操作。

4. between 第一个操作数是列的名称,第二个和第三个操作数为范围的最小值和最大值。

[’between’, ’id’, 1, 10] //生成 id BETWEEN 1 AND 10

not between:和between相似。

5. in 第一个操作数为列或者DB表达式,第二个操作数为数组

[’in’, ’id’, [1, 2, 3]] //生成 id IN (1, 2, 3)

not in和in相似。注意:这个方法会对列进行引用,对数组中的值也会编码。

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相似。

分享到:

评论

昵 称:
游客27224
计划
07-02 21:09
游客21456
11
02-01 16:16