首页 > 技术分享 > Yii
收藏

yii2操作数据库常用语句

10/21 14:26
大潇博客 原创文章,转载请标明出处

查询基本方法:

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;


删除数据:

$result=self::find()->where(["id"=>$id])->one();  //先查询

return $result->delete();  //再删除


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311