zoukankan      html  css  js  c++  java
  • 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)方式操作数据库

    我们需要创建一个继承自yiidbActiveRecord的模型,然后重写tableName()函数,返回要操作的表名。

    <?php
    
    namespace appmodels;
    
    use yiidbActiveRecord;
    
    class MyUser extends ActiveRecord
    {
        public static function tableName()
        {
            return '{{%user}}';
        }
    }  

    常用操作如下:

    // 查询一条记录
    // asArray的作用是以数组形式返回结果
    // find()会返回一个ActiveQuery对象,ActiveQuery对象继承自yiidbQuery,所以可以使用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;
    }

    具体更多的操作方式建议查看官方文档。

  • 相关阅读:
    联想 Vibe Shot(Z90-3) 免recovery 获取ROOT权限 救砖 VIBEUI V3.1_1625
    联想 Z5S(L78071)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.370
    联想 Z5(L78011) 免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.254
    联想 S5 Pro(L78041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.123
    第二阶段 冲刺八
    第二阶段 冲刺七
    第二阶段 冲刺六
    第二阶段 冲刺五
    代码大全阅读笔记03
    学习进度十二
  • 原文地址:https://www.cnblogs.com/jkko123/p/8656756.html
Copyright © 2011-2022 走看看