YII2 增删改查,超详解说,举列。

查询:(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 = newUsers(); //先实例化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(); 

你可能感兴趣的:(yii,php后台)