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

Yii框架自定义数据库操作组件示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-22 13:43:10 浏览: 评论:0 

本文实例讲述了Yii框架自定义数据库操作组件,分享给大家供大家参考,具体如下:

Yii 的数据库操作对象提供的方法确实很方便,但是有的时候我们已经习惯了我们以前编写php的数据库操作语法,没有那么多时间去仔细看每个Yii提供的数据库操作语法,怎么办呢? 那就是一边学习,一边二次封装自己习惯的数据库操作类。 以后我们使用数据库操作对象,就用我们自己定义的组件去操作。

将我的数据库操作组件注册进配置文件web.php 中

  1. array
  2.   'components' => array
  3.     //自定义数据库操作组件 
  4.     'dbOper'  => array
  5.       'class'   => 'app\components\DbOper\realization\DbRealization1' 
  6.     ), 
  7.     //Yii 框架数据库连接组件 
  8.     'db'      =>  array
  9.         'class'     => 'yii\db\Connection'
  10.         'dsn'      => 'mysql:host=localhost;dbname=yii'
  11.         'username'   => 'root'
  12.         'password'   => '123456'
  13.         'charset'    => 'utf8' 
  14.       ); 
  15.   ) 

然后我们就可以在components 目录下定义我们的数据库操作类了,因为,不知道怎么去获得php pdo 的原生操作对象,所以这里是对Yii数据库操作类的一个二次封装。

接口文件 DbOper.php 自定义的数据库操作类都得实现该接口

  1. <?php 
  2. namespace app\components\DbOper; 
  3. /** 
  4.  * 自定义数据库操作组件 依赖系统定义组件db 
  5.  */ 
  6. interface DbOper 
  7.   /** 
  8.    * 查询多条数据 
  9.    * @param 
  10.    * String $sql 需要查询的sql语句 
  11.    * array $keyVal 字段映射 
  12.    * @return 
  13.    * array 查询结果 
  14.    */ 
  15.   public function fetchAll($sql='',$keyVal=array()); 
  16.   /** 
  17.    * 查询一条数据 原生sql 
  18.    * @param 
  19.    * String $sql 需要查询的sql语句 
  20.    * array $keyVal 字段映射 
  21.    * @return 
  22.    * array 查询结果 
  23.    */ 
  24.   public function fetch($sql='',$keyVal=array()); 
  25.   /** 
  26.    * 添加数据 
  27.    * @param 
  28.    * String $tableName 表名 
  29.    * array $values 要插入的数据 
  30.    * @return 
  31.    * int 受影响的行数 
  32.    */ 
  33.   public function insert($tableName='',$values=array()); 
  34.   /** 
  35.    * 更新数据 
  36.    * @param 
  37.    * String $tableName 表名 
  38.    * array | String $where 修改条件 为 1 时更改该表所有的行 
  39.    * array $update 要更新的数据  
  40.    * @return 
  41.    * int 受影响的行数 
  42.    */ 
  43.   public function update($tableName='',$where='',$update=array()); 
  44.   /** 
  45.    * 删除数据 
  46.    * @param 
  47.    * String $tableName 表名 
  48.    * array | String $where 删除条件 
  49.    * @return 
  50.    * int 受影响的行数 
  51.    */ 
  52.   public function delete($tableName='',$where=''); 
  53.   /** 
  54.    * 事务处理 
  55.    * @param 
  56.    * array $sqls 要执行的sql集合 
  57.    * return 
  58.    * boolean 是否执行成功 
  59.    */ 
  60.   public function transcation($sqls = array()); 
  61.   /** 
  62.    * 获得数据库链接 
  63.    */ 
  64.   public function getYiiDbConnection(); 

针对DbOper 接口的实现类 DbRealization1.php

  1. <?php 
  2. namespace app\components\DbOper\realization; 
  3. use Yii; 
  4. use app\components\DbOper\DbOper; 
  5. /** 
  6.  * 自定义数据库操作组件实现类 
  7.  */ 
  8. class DbRealization1 implements DbOper 
  9.   private $db = null; 
  10.   /** 
  11.    * interface @Override 
  12.    */ 
  13.   public function fetchAll($sql='',$keyVal=array()) 
  14.   { 
  15.     if($sql === ''
  16.       return array(); 
  17.     $result = $this->getQueryObj($sql,$keyVal)->queryAll(); 
  18.     if($result
  19.       return $result
  20.     else 
  21.       return array(); 
  22.   } 
  23.   /** 
  24.    * interface @Override 
  25.    */ 
  26.   public function fetch($sql='',$keyVal=array()) 
  27.   { 
  28.     if($sql === ''
  29.       return array(); 
  30.     $result = $this->getQueryObj($sql,$keyVal)->queryOne(); 
  31.     if($result
  32.       return $result
  33.     else 
  34.       return array(); 
  35.   } 
  36.   /** 
  37.    * interface @Override 
  38.    */ 
  39.   public function insert($tableName='',$values=array()) 
  40.   { 
  41.     if($tableName === ''
  42.       return 0; 
  43.     $insert = $this->getYiiDbConnection()->createCommand(); 
  44.     if(is_array($values[0])) 
  45.     { 
  46.       $keys = array_keys($values[0]); 
  47.       return $insert->batchInsert($tableName,$keys,$values)->execute(); 
  48.     } 
  49.     return $insert->insert($tableName,$values)->execute(); 
  50.   } 
  51.   /** 
  52.    * interface @Override 
  53.    */ 
  54.   public function update($tableName='',$where = '',$update=array()) 
  55.   { 
  56.     if($tableName === ''
  57.       return 0; 
  58.     if($where === ''
  59.       return 0; 
  60.     return $this->getYiiDbConnection() 
  61.         ->createCommand() 
  62.         ->update($tableName,$update,$where
  63.         ->execute(); 
  64.   } 
  65.   /** 
  66.    * interface @Override 
  67.    */ 
  68.   public function delete($tableName='',$where=''
  69.   { 
  70.     if($tableName === ''
  71.       return 0; 
  72.     return $this->getYiiDbConnection() 
  73.         ->createCommand() 
  74.         ->delete($tableName,$where
  75.         ->execute(); 
  76.   } 
  77.   /** 
  78.    * 获得查询操作对象 
  79.    * @return  
  80.    * Object  
  81.    */ 
  82.   private function getQueryObj($sql='',$keyVal=array()) 
  83.   { 
  84.     $query = $this->getYiiDbConnection()->createCommand($sql); 
  85.     if(!emptyempty($keyVal)) 
  86.       $query->bindValues($keyVal); 
  87.     return $query
  88.   } 
  89.   /** 
  90.    * interface @Override 
  91.    */ 
  92.   public function transcation($sqls = array()) 
  93.   { 
  94.     if(emptyempty($sqls)) 
  95.       return false; 
  96.     $db = $this->getYiiDbConnection(); 
  97.     $outerTransaction = $db->beginTransaction(); 
  98.     $runClient = true; 
  99.     try 
  100.     { 
  101.       foreach($sqls as $sql
  102.       { 
  103.         $db->createCommand($sql)->execute(); 
  104.       } 
  105.       $outerTransaction->commit(); 
  106.     }catch(\Exception $e){ 
  107.       $runClient = false; 
  108.       $outerTransaction->rollback(); 
  109.     } 
  110.     return $runClient
  111.   } 
  112.   /** 
  113.    * interface @Override 
  114.    */ 
  115.   public function getYiiDbConnection() 
  116.   { 
  117.     if($this->db === null) 
  118.     { 
  119.       $this->db = Yii::$app->db; 
  120.     } 
  121.     return $this->db; 
  122.   } 

注意:我的自定义数据库操作类 依赖 Yii::$app->db 这个组件,也就是框架自带的数据库连接组件

然后我们就可以通过 Yii::$app->dbOper 去操作数据库了。

Tags: Yii自定义数据库

分享到: