YII2框架中操作数据库的方式实例分析
程序员文章站
2022-04-09 16:20:26
本文实例讲述了yii2框架中操作数据库的方式。分享给大家供大家参考,具体如下:一、以createcommand方式:// yii2中通过createcommand来处理数据库 // 查询多条记录//...
本文实例讲述了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; }
具体更多的操作方式建议查看官方文档。