当前位置:首页 > CMS教程 > 其它CMS > 列表

YII2框架中操作数据库的方式实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-20 09:13:47 浏览: 评论:0 

篇文章主要介绍了YII2框架中操作数据库的方式,结合实例形式总结分析了YII2使用createCommand方式及AR(Active Record)方式操作数据库相关实现技巧,需要的朋友可以参考下。

本文实例讲述了YII2框架中操作数据库的方式,分享给大家供大家参考,具体如下:

一、以createCommand方式:

  1. // YII2中通过createCommand来处理数据库 
  2.    
  3. // 查询多条记录 
  4. // {{%user}} 表示如果设置了表前缀,YII会自动帮你替换 
  5. $data1 = YII::$app->db->createCommand('select * from {{%user}}')->queryAll(); 
  6.    
  7.    
  8. // 查询一条记录 
  9. // createCommand的第二个参数可以进行参数绑定 
  10. $data2 = YII::$app->db->createCommand('select * from {{%user}} where id=:id', ['id' => 2])->queryOne(); 
  11.    
  12.    
  13. // 返回一列(第一列)数据 
  14. $data3 = YII::$app->db->createCommand('select name from {{%user}}')->queryColumn(); 
  15.    
  16.    
  17. // 返回一个标量值,常用于统计 
  18. $data4 = YII::$app->db->createCommand('select count(*) as cnt from {{%user}}')->queryScalar(); 
  19.    
  20. // 绑定参数,防止SQL注入问题 
  21. // bindValue绑定一个参数 
  22. $data5 = YII::$app->db->createCommand('select * from {{%user}} where id=:id'
  23.   ->bindValue(':id', 3) 
  24.   ->queryOne(); 
  25.    
  26. // 绑定多个参数 
  27. $data6 = YII::$app->db->createCommand('select * from {{%user}} where id=:id and name=:name'
  28.   ->bindValues([':id' => 5, ':name' => 'eee']) 
  29.   ->queryOne(); 
  30.    
  31. // 绑定参数引用 
  32. $id = 7; 
  33. $data7 = YII::$app->db->createCommand('select * from {{%user}} where id=:id'
  34.   ->bindParam(':id'$id
  35.   ->queryOne(); 
  36.    
  37. // 执行非查询语句 
  38. $data8 = YII::$app->db->createCommand('update {{%user}} set name=:name where id=:id'
  39.   ->bindValues([':name' => 'abcdef'':id' => 8]) 
  40.   ->execute(); 
  41.    
  42. // 当然,我们也可以用更加简便的方法 
  43. // insert()插入 
  44. $data9 = YII::$app->db->createCommand()->insert('{{%user}}', [ 
  45.   'name' => 'test'
  46.   'sex' => 1, 
  47.   'age' => 28, 
  48. ])->execute(); 
  49.    
  50. // batchInsert()批量插入 
  51. $data10 = YII::$app->db->createCommand()->batchInsert('{{%user}}', ['name''sex''age'], [ 
  52.   ['111', 1, 11], 
  53.   ['222', 1, 22], 
  54. ])->execute(); 
  55.    
  56. // update()更新 
  57. $data11 = YII::$app->db->createCommand()->update('{{%user}}', [ 
  58.   'name' => '1242143214' 
  59. ], 'id=:id', ['id' => 10])->execute(); 
  60.    
  61. // delete()删除 
  62. $data12 = YII::$app->db->createCommand()->delete('{{%user}}''id=:id', ['id' => 11])->execute(); 
  63.    
  64.    
  65. // 执行事务 
  66. $trans = YII::$app->db->beginTransaction(); 
  67.    
  68. try { 
  69.   YII::$app->db->createCommand()->update('{{%user}}', ['age' => 12], 'id=:id', ['id' => 13])->execute(); 
  70.   YII::$app->db->createCommand()->update('{{%user}}', ['age' => 22], 'id=:id', ['id' => 14])->execute(); 
  71.    
  72.   $trans->commit(); 
  73. } catch (\Exception $e) { 
  74.   //如果语句中有一个执行失败,那么就将回滚 
  75.   $trans->rollBack(); 
  76.   throw $e
  77.    
  78. // 获取表的定义信息 
  79. $info = YII::$app->db->getTableSchema('{{%user}}'); 

二、以AR(Active Record)方式操作数据库

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

  1. <?php 
  2. namespace app\models; 
  3.    
  4. use yii\db\ActiveRecord; 
  5.    
  6. class MyUser extends ActiveRecord 
  7.   public static function tableName() 
  8.   { 
  9.     return '{{%user}}'
  10.   } 

常用操作如下:

  1. // 查询一条记录 
  2. // asArray的作用是以数组形式返回结果 
  3. // find()会返回一个ActiveQuery对象,ActiveQuery对象继承自yii\db\Query,所以可以使用Query中的所有查询方法 
  4. $data1 = MyUser::find()->where(['id' => 1])->asArray()->one(); 
  5.    
  6. // 查询多条记录 
  7. $data2 = MyUser::find()->where([])->orderBy('id desc')->asArray()->all(); 
  8.    
  9. // 根据主键获取一条记录 
  10. $data3 = MyUser::findOne(3); 
  11.    
  12. // 根据主键获取多条记录 
  13. $data4 = MyUser::findAll([4, 5, 6, 7]); 
  14.    
  15. // 带条件查询多条记录 
  16. $data5 = MyUser::findAll(['sex' => 1]); 
  17.    
  18. // 运行原生SQL 
  19. $data6 = MyUser::findBySql('select * from {{%user}} where id=:id', [':id' => 8])->asArray()->one(); 
  20.    
  21. // 添加数据 
  22. // 准备一个新的实例,然后设置对应字段属性,保存 
  23. $user = new MyUser(); 
  24. $user->name = 'test'
  25. $user->sex = 1; 
  26. $user->age = 22; 
  27. $user->save(); 
  28.    
  29. // 修改数据 
  30. // 先获取一个对象,然后设置对应字段属性,保存 
  31. $upd = MyUser::findOne(10); 
  32. $upd->name = 'abcdefg'
  33. $upd->save(); 
  34.    
  35. // 修改多条数据 
  36. $data7 = MyUser::updateAll(['name' => 'update'], ['sex' => 1]); 
  37.    
  38. // 删除一条数据 
  39. $del = MyUser::findOne(15); 
  40. $del->delete(); 
  41.    
  42. // 删除多条数据 
  43. $data8 = MyUser::deleteAll(['sex' => 0]); 
  44.    
  45. // 事务操作 
  46. $user2 = MyUser::findOne(22); 
  47. $user3 = MyUser::findOne(33); 
  48. $trans = MyUser::getDb()->beginTransaction(); 
  49. try { 
  50.   $user2->name = '2222'
  51.   $user3->name = '3333'
  52.   //修改数据 
  53.   $user2->save(); 
  54.   $user3->save(); 
  55.    
  56.   $trans->commit(); 
  57. } catch (\Exception $e) { 
  58.   $trans->rollBack(); 
  59.   throw $e

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

Tags: YII2操作数据库

分享到: