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;
    }

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

  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/jkko123/p/8656756.html
Copyright © 2011-2022 走看看