查询:(User是模型名)
1.对象形式
User::find()->all();
返回所有数据;
User::findAll(['status'=>1]);
返回所有字段 status=1 的数据;
2.数组形式(asArray())
User::find()->asArray()->all();
返回所有数据;
User::findAll(['status'=>1]);
返回所有字段 status=1 的数据;
User::findOne(['status'=>1]);
返回一条字段 status=1 的数据,如果有多条,那么将会报错!
条件查询:where 、andwhere 、 orwhere(如果要想以数组形式展示则在 one,all前面加asArray())
User::find()->where(['name' => 騷周'])->one();
此方法返回 ['name' => '騷周'] 的一条数据;如果有多条,那么将会报错!
User::find()->where(['name' => '騷周'])->all();
此方法返回 ['name' => '騷周'] 的所有数据;
User::find()->andWhere(['sex' => '男', 'age' => '24'])->count('id');
统计符合条件的总条数;
User::find()->where(['and','id=1','age=24'])->all();
查询id=2,并且age=24的所有数据;如果只有一条,最好用one();
User::find()->where(['or','id=1','id=2'])->all();
查询id=1,或者id=2的数据,如果2条存在,则都会查询出来;
and
// 我们要查询id大于1并且小于3的数据
$user = User::find()->where(['and' , 'id > 1' , 'id < 3'])->all();
// 或者用以下方式,更为安全
$user = User::find()->where(['and' , ['>' , 'id' , 1] , ['<' , 'id' , 3]])->all();
// 往往我们会处理比这更复杂的sql
// 假如我们要查询name是騷周 并且 id大于1或者id小于3的数据
$user = User::find()->where(
['and' , ['=' , 'name' , '騷周'] ,
['or' , ['=' , 'id' , 1] , ['=' , 'id' , 3] ]
])->asArray()->all();
or
// 我们要查询id等于1或者id等于3的数据
$user = User::find()->where(['or' , 'id = 1' , 'id = 3'])->all();
// 我们同样可以使用以下方式
$user = User::find()->where(['or' , ['=' , 'id' , 1] , ['=' , 'id' , 3]])->all();
// 假如我们要查询id在4,8,9范围内 或者 id在1,2,3范围内呢?
$user = User::find()->where(['or' , ['id' => [4,8,9]] , ['id' => [1,2,3]]])->all();
between
// 我们要查询id在1到10的范围之内
$user = User::find()->where(['between' , 'id' , 1 , 10])->all();
in
// 我们要查询id在1、2、3的范围内
$user = User::find()->where(['in' , 'id' , [1,2,3]])->all();
注释:1.针对同一个字段不能用andWhere加= 或者where(['and','id=1','id=24']),这样是错误的!
2.针对同一个字段使用where(['or','id=1','id=2']);如果给的条件都满足,all查询的是所有的数据,one查询的是第一条满足 的数据。
sql语句查询:
User::findBySql('SELECT * FROM user')->all();
此方法是用 sql 语句查询 user 表里面的所有数据;
等价于 User::findAll();
User::findBySql('SELECT * FROM user')->one();
此方法是用 sql 语句查询 user 表里面的一条数据;
等价于 User::findOne();
注释:1.这个方法在很多时候解决了不方便调取数据的问题。
2 .findBySql 查询出来是对象形式;可采用 Yii::app()->db->createCommand($sql)->queryRow();转化为数组形式。
辅助查询:
User::find()->one();
此方法返回一条数据;
User::find()->all();
此方法返回所有数据;
User::find()->count();
此方法返回记录的数量;
User::find()->average();
此方法返回指定列的平均值;
User::find()->min();
此方法返回指定列的最小值 ;
User::find()->max();
此方法返回指定列的最大值 ;
User::find()->scalar();
此方法返回值的第一行第一列的查询结果;
User::find()->column();
此方法返回查询结果中的第一列的值;
User::find()->exists();
此方法返回一个值指示是否包含查询结果的数据行;
User::find()->batch(5);
每次取 5 条数据
User::find()->each(5);
每次取 5 条数据, 迭代查询
支持防sql注入:
原生sql语句:$sql="select * from test where id=:id";
使用AR类:$user = WB_User::find()->where("id = :id",[':id'=>$userid])->one();
模糊查询:(title like "%tit%" and title like "%abc%")
$result=User::find()->where(['like','title',['tit','abc']])->all(); //%会自动添加
// 查询name中包含“騒”这个字符的数据
$user = User::find()->where(['like' , 'name' , '騒'])->all();
// 通配name中包含“騒”这个字符,而且还得包含“周”这个字符
$user = User::find()->where(['like' , 'name' , ['騒' , '周']])->all();
// 通配左边(右边只需换位置)即可
$user = User::find()->where(['like' , 'name' , '%周' , false])->all();
排序查询:
$user=User::find()->where($condition)->asArray()->orderBy('id DESC')->all();
根据条件以数组形式返回所有数据,并根据ID倒序
批量查询:
1.foreach(Test::find()->batch(1) as $tests){
//batch 是指每次拿一条(可任意指定)。放进 $tests 数组中
//操作 $tests 数组
}
2.$user = Yii:app->db->createCommand()->select('*')->from('表名')->queryAll();
删除操作:(delete)
①
$result=Test::find()->where(['id'=>1])->delete();
$result[0]->delete(); //也可以删除其中的一项;
②
$result=Test::deleteAll('id>:id',array("id"=>0)); //删除 id 大于 0的。不写参数删除全部,支持占位符形式
③(带条件删除)
$connection ->createCommand()
->delete('tbl_user', 'status = 0')
->execute();
④(使用sql删除)
$connection ->createCommand('DELETE FROM tbl_user WHERE userid=:userid')
->execute(); ⑤(查找并删除)
$user = User::findOne(2); $user->delete();
// 输出语句
// DELETE FROM `tbl_user` WHERE `id`='2'
删除多个:deleteAll()
①
Test::deleteAll('status = :status AND age > :age', [':age' => 20, ':status' => 'active']); //DELETE FROM `tbl_user`where age>20 and status='active'
②
Test::deleteAll([ 'and', 'type = :type_id',['not in', 'usercategoryid', $categoriesList]],[ ':type_id' => 2]); //DELETE FROM `tbl_user` WHERE (type = 2) AND (`usercategoryid` NOT IN (1, 2, 3))
③
Yii::app()->db->createCommand()->delete('tbl_user', 'id=:id',array(':id'=> 2));
修改:(先查询后修改)
①
$result=Test::find()->where(['id'=>1])->one(); //返回一条
$result->title="title4"; //要修改的字段
$result->save(); //保存数据
②//修改
yii::$app->db->createCommand()->update('yii_company_info', ["company_name"=>$company_name,"company_desc"=>$company_desc],"company_id=$company_id")->execute();
插入: ①//使用user model添加数据 $user = new
Users(); //先实例化model$user->setAttributes(array('username'=> 'user1', 'email'=> '[email protected]','password'=>md5("abcsd5a4"), 'last_login'=>time())); $user->save();
②Yii::$app->db->createCommand()->insert('tbl_user',array('username'=> '騷周','email'=> '[email protected]'))->execute();