

Yii
yii2操作数据库常用语句
10-21 14:34查询基本方法:
User::find()->all(); //返回所有数据;
User::findOne($id); //返回 主键 id=1 的一条数据(举个例子);
User::find()->where(['name' => '小伙儿'])->one(); //返回 ['name' => '小伙儿'] 的一条数据;
User::find()->where(['name' => '小伙儿'])->all(); //返回 ['name' => '小伙儿'] 的所有数据;
User::find()->orderBy('id DESC')->all(); //排序查询;
User::find()->addGroupBy("typeid"); //分组
User::find()->alias("u"); //设置别名,多表联查场景使用
User::find()->select("id"); //查询指定字段,多表联查时使用数组,比如select(["a.*","b.id"])
User::findBySql('SELECT * FROM user')->all(); //用 sql 语句查询 user 表里面的所有数据;
User::findBySql('SELECT * FROM user')->one(); //用 sql 语句查询 user 表里面的一条数据;
User::find()->andWhere(['sex' => '男', 'age' => '24'])->count('id'); //统计符合条件的总条数;
//andFilterWhere:当条件为空时,自动过滤该条件(andWhere不会过滤)
User::find()->andFilterWhere(['like', 'name', '小伙儿']); //用 like 查询 name 等于 小伙儿的 数据
User::find()->one(); //返回一条数据;
User::find()->count(); //返回记录的数量;
User::find()->average(); //返回指定列的平均值;
User::find()->min(); //返回指定列的最小值;
User::find()->max(); //返回指定列的最大值;
User::find()->scalar(); //返回值的第一行第一列的查询结果;
User::find()->column(); //返回查询结果中的第一列的值;
User::find()->exists(); //返回一个值指示是否包含查询结果的数据行;
User::find()->batch(10); //每次取 10 条数据
User::find()->each(10); //每次取 10 条数据,迭代查询
User::find()->andWhere("find_in_set('2',sex)") //find_in_set用法
Yii::$app->db->createCommand($sql)->execute(); //直接使用SQL语句
Yii::$app->db->quoteValue('参数'); //转义防注入,实现mysql_real_escape_string功能
多方法联合使用:
//class 类名 extends ActiveRecord
//继承了ActiveRecord类后,self可以直接调用方法
$result=self::find()
->where(["id"=>$id]) //查询条件
->select(['id','name']) //查询字段
->offset(($page-1)*$pagesize) //从第几条开始查
->limit($pagesize) //查询数量
->orderBy('listorder desc,id desc') //排序
->asarray() //查询格式为数组
->all(); //查询全部
查询where加条件:
$time=strtotime(date('Y-m-d',time()));
$result=self::find()->select("id")
->where([">","create_time",$time]) //where加条件方法
->count();
查询where in使用方法:
$result=self::find()
->where(['in','paper_id',$paper_ids]) //where in
->where(['uid'=>$uid]) //继续拼接where条件
->asarray()
->all();
使用sql查询:
$sql="select u.major,count(aw.id) num from ".self::tablename()." aw join ".User::tableName()." u on aw.uid=u.id where u.is_virtual=0";
if($id!=""){
$sql.=" and aw.pid=".$id;
}
$sql.=" group by u.major";
$result=self::findBySql($sql)->asarray()->all(); //执行sql语句,查询全部,并返回数组结果集
findBySql也能执行修改、添加等,但不能获得影响行数等信息
联表查询:
$result=self::find()->alias('aw') //给当前模型的默认表起别名
->where(['aw.paper_id'=>$paper_id])
->leftJoin(Paper::tableName().' p', 'aw.paper_id=p.id') //innerJoin和leftJoin语法相同
->select(['aw.*','p.name paper_name'])
->orderBy('aw.id desc')
->offset($offset)
->limit($pagesize)
->asArray()
->all();
新增数据:
foreach($data as $item=>$elem_info){
$this->$item=$elem_info;
}
if($this->save()) return $this->id; //添加成功,返回添加后的主键
return false; //如果添加失败,返回false
修改数据:
$data=array('name'=>'张三','age'=>'20','id'=>6); //要修改的数据,必须包含要修改的条件
$result=self::find()->where(["id"=>$data['id']])->one(); //先查要修改的数据
unset($data['id']); //删掉主键
foreach($data as $item=>$elem_info){
$result->$item=$elem_info; //循环赋值
}
return $result->save(); //执行修改
批量修改:
//updateAll共包含两个数组,第一个为要批量修改的字段和值,第二个为修改条件
$result = $this->updateAll(['status'=>$sms_data['status']], ['telephone'=>$sms_data['telephone']]);
if(!$result || $result<=0){
return false;
}
return true;
删除数据:
return $result->delete(); //再删除
