YII2框架中操作数据库的方式实例分析
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-20 09:13:47 浏览: 评论:0
篇文章主要介绍了YII2框架中操作数据库的方式,结合实例形式总结分析了YII2使用createCommand方式及AR(Active Record)方式操作数据库相关实现技巧,需要的朋友可以参考下。
本文实例讲述了YII2框架中操作数据库的方式,分享给大家供大家参考,具体如下:
一、以createCommand方式:
- // YII2中通过createCommand来处理数据库
- // 查询多条记录
- // {{%user}} 表示如果设置了表前缀,YII会自动帮你替换
- $data1 = YII::$app->db->createCommand('select * from {{%user}}')->queryAll();
- // 查询一条记录
- // createCommand的第二个参数可以进行参数绑定
- $data2 = YII::$app->db->createCommand('select * from {{%user}} where id=:id', ['id' => 2])->queryOne();
- // 返回一列(第一列)数据
- $data3 = YII::$app->db->createCommand('select name from {{%user}}')->queryColumn();
- // 返回一个标量值,常用于统计
- $data4 = YII::$app->db->createCommand('select count(*) as cnt from {{%user}}')->queryScalar();
- // 绑定参数,防止SQL注入问题
- // bindValue绑定一个参数
- $data5 = YII::$app->db->createCommand('select * from {{%user}} where id=:id')
- ->bindValue(':id', 3)
- ->queryOne();
- // 绑定多个参数
- $data6 = YII::$app->db->createCommand('select * from {{%user}} where id=:id and name=:name')
- ->bindValues([':id' => 5, ':name' => 'eee'])
- ->queryOne();
- // 绑定参数引用
- $id = 7;
- $data7 = YII::$app->db->createCommand('select * from {{%user}} where id=:id')
- ->bindParam(':id', $id)
- ->queryOne();
- // 执行非查询语句
- $data8 = YII::$app->db->createCommand('update {{%user}} set name=:name where id=:id')
- ->bindValues([':name' => 'abcdef', ':id' => 8])
- ->execute();
- // 当然,我们也可以用更加简便的方法
- // insert()插入
- $data9 = YII::$app->db->createCommand()->insert('{{%user}}', [
- 'name' => 'test',
- 'sex' => 1,
- 'age' => 28,
- ])->execute();
- // batchInsert()批量插入
- $data10 = YII::$app->db->createCommand()->batchInsert('{{%user}}', ['name', 'sex', 'age'], [
- ['111', 1, 11],
- ['222', 1, 22],
- ])->execute();
- // update()更新
- $data11 = YII::$app->db->createCommand()->update('{{%user}}', [
- 'name' => '1242143214'
- ], 'id=:id', ['id' => 10])->execute();
- // delete()删除
- $data12 = YII::$app->db->createCommand()->delete('{{%user}}', 'id=:id', ['id' => 11])->execute();
- // 执行事务
- $trans = YII::$app->db->beginTransaction();
- try {
- YII::$app->db->createCommand()->update('{{%user}}', ['age' => 12], 'id=:id', ['id' => 13])->execute();
- YII::$app->db->createCommand()->update('{{%user}}', ['age' => 22], 'id=:id', ['id' => 14])->execute();
- $trans->commit();
- } catch (\Exception $e) {
- //如果语句中有一个执行失败,那么就将回滚
- $trans->rollBack();
- throw $e;
- }
- // 获取表的定义信息
- $info = YII::$app->db->getTableSchema('{{%user}}');
二、以AR(Active Record)方式操作数据库
我们需要创建一个继承自\yii\db\ActiveRecord的模型,然后重写tableName()函数,返回要操作的表名。
- <?php
- namespace app\models;
- use yii\db\ActiveRecord;
- class MyUser extends ActiveRecord
- {
- public static function tableName()
- {
- return '{{%user}}';
- }
- }
常用操作如下:
- // 查询一条记录
- // asArray的作用是以数组形式返回结果
- // find()会返回一个ActiveQuery对象,ActiveQuery对象继承自yii\db\Query,所以可以使用Query中的所有查询方法
- $data1 = MyUser::find()->where(['id' => 1])->asArray()->one();
- // 查询多条记录
- $data2 = MyUser::find()->where([])->orderBy('id desc')->asArray()->all();
- // 根据主键获取一条记录
- $data3 = MyUser::findOne(3);
- // 根据主键获取多条记录
- $data4 = MyUser::findAll([4, 5, 6, 7]);
- // 带条件查询多条记录
- $data5 = MyUser::findAll(['sex' => 1]);
- // 运行原生SQL
- $data6 = MyUser::findBySql('select * from {{%user}} where id=:id', [':id' => 8])->asArray()->one();
- // 添加数据
- // 准备一个新的实例,然后设置对应字段属性,保存
- $user = new MyUser();
- $user->name = 'test';
- $user->sex = 1;
- $user->age = 22;
- $user->save();
- // 修改数据
- // 先获取一个对象,然后设置对应字段属性,保存
- $upd = MyUser::findOne(10);
- $upd->name = 'abcdefg';
- $upd->save();
- // 修改多条数据
- $data7 = MyUser::updateAll(['name' => 'update'], ['sex' => 1]);
- // 删除一条数据
- $del = MyUser::findOne(15);
- $del->delete();
- // 删除多条数据
- $data8 = MyUser::deleteAll(['sex' => 0]);
- // 事务操作
- $user2 = MyUser::findOne(22);
- $user3 = MyUser::findOne(33);
- $trans = MyUser::getDb()->beginTransaction();
- try {
- $user2->name = '2222';
- $user3->name = '3333';
- //修改数据
- $user2->save();
- $user3->save();
- $trans->commit();
- } catch (\Exception $e) {
- $trans->rollBack();
- throw $e;
- }
具体更多的操作方式建议查看官方文档。
Tags: YII2操作数据库
- 上一篇:YII2框架自定义全局函数的实现方法小结
- 下一篇:最后一页
相关文章
- ·Yii2框架操作数据库的方法分析【以mysql为例】(2021-11-23)

推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)