Yii框架自定义数据库操作组件示例
发布:smiling 来源: PHP粉丝网 添加日期:2022-01-22 13:43:10 浏览: 评论:0
本文实例讲述了Yii框架自定义数据库操作组件,分享给大家供大家参考,具体如下:
Yii 的数据库操作对象提供的方法确实很方便,但是有的时候我们已经习惯了我们以前编写php的数据库操作语法,没有那么多时间去仔细看每个Yii提供的数据库操作语法,怎么办呢? 那就是一边学习,一边二次封装自己习惯的数据库操作类。 以后我们使用数据库操作对象,就用我们自己定义的组件去操作。
将我的数据库操作组件注册进配置文件web.php 中
- array(
- 'components' => array(
- //自定义数据库操作组件
- 'dbOper' => array(
- 'class' => 'app\components\DbOper\realization\DbRealization1'
- ),
- //Yii 框架数据库连接组件
- 'db' => array(
- 'class' => 'yii\db\Connection',
- 'dsn' => 'mysql:host=localhost;dbname=yii',
- 'username' => 'root',
- 'password' => '123456',
- 'charset' => 'utf8'
- );
- )
- )
然后我们就可以在components 目录下定义我们的数据库操作类了,因为,不知道怎么去获得php pdo 的原生操作对象,所以这里是对Yii数据库操作类的一个二次封装。
接口文件 DbOper.php 自定义的数据库操作类都得实现该接口
- <?php
- namespace app\components\DbOper;
- /**
- * 自定义数据库操作组件 依赖系统定义组件db
- */
- interface DbOper
- {
- /**
- * 查询多条数据
- * @param
- * String $sql 需要查询的sql语句
- * array $keyVal 字段映射
- * @return
- * array 查询结果
- */
- public function fetchAll($sql='',$keyVal=array());
- /**
- * 查询一条数据 原生sql
- * @param
- * String $sql 需要查询的sql语句
- * array $keyVal 字段映射
- * @return
- * array 查询结果
- */
- public function fetch($sql='',$keyVal=array());
- /**
- * 添加数据
- * @param
- * String $tableName 表名
- * array $values 要插入的数据
- * @return
- * int 受影响的行数
- */
- public function insert($tableName='',$values=array());
- /**
- * 更新数据
- * @param
- * String $tableName 表名
- * array | String $where 修改条件 为 1 时更改该表所有的行
- * array $update 要更新的数据
- * @return
- * int 受影响的行数
- */
- public function update($tableName='',$where='',$update=array());
- /**
- * 删除数据
- * @param
- * String $tableName 表名
- * array | String $where 删除条件
- * @return
- * int 受影响的行数
- */
- public function delete($tableName='',$where='');
- /**
- * 事务处理
- * @param
- * array $sqls 要执行的sql集合
- * return
- * boolean 是否执行成功
- */
- public function transcation($sqls = array());
- /**
- * 获得数据库链接
- */
- public function getYiiDbConnection();
- }
针对DbOper 接口的实现类 DbRealization1.php
- <?php
- namespace app\components\DbOper\realization;
- use Yii;
- use app\components\DbOper\DbOper;
- /**
- * 自定义数据库操作组件实现类
- */
- class DbRealization1 implements DbOper
- {
- private $db = null;
- /**
- * interface @Override
- */
- public function fetchAll($sql='',$keyVal=array())
- {
- if($sql === '')
- return array();
- $result = $this->getQueryObj($sql,$keyVal)->queryAll();
- if($result)
- return $result;
- else
- return array();
- }
- /**
- * interface @Override
- */
- public function fetch($sql='',$keyVal=array())
- {
- if($sql === '')
- return array();
- $result = $this->getQueryObj($sql,$keyVal)->queryOne();
- if($result)
- return $result;
- else
- return array();
- }
- /**
- * interface @Override
- */
- public function insert($tableName='',$values=array())
- {
- if($tableName === '')
- return 0;
- $insert = $this->getYiiDbConnection()->createCommand();
- if(is_array($values[0]))
- {
- $keys = array_keys($values[0]);
- return $insert->batchInsert($tableName,$keys,$values)->execute();
- }
- return $insert->insert($tableName,$values)->execute();
- }
- /**
- * interface @Override
- */
- public function update($tableName='',$where = '',$update=array())
- {
- if($tableName === '')
- return 0;
- if($where === '')
- return 0;
- return $this->getYiiDbConnection()
- ->createCommand()
- ->update($tableName,$update,$where)
- ->execute();
- }
- /**
- * interface @Override
- */
- public function delete($tableName='',$where='')
- {
- if($tableName === '')
- return 0;
- return $this->getYiiDbConnection()
- ->createCommand()
- ->delete($tableName,$where)
- ->execute();
- }
- /**
- * 获得查询操作对象
- * @return
- * Object
- */
- private function getQueryObj($sql='',$keyVal=array())
- {
- $query = $this->getYiiDbConnection()->createCommand($sql);
- if(!emptyempty($keyVal))
- $query->bindValues($keyVal);
- return $query;
- }
- /**
- * interface @Override
- */
- public function transcation($sqls = array())
- {
- if(emptyempty($sqls))
- return false;
- $db = $this->getYiiDbConnection();
- $outerTransaction = $db->beginTransaction();
- $runClient = true;
- try
- {
- foreach($sqls as $sql)
- {
- $db->createCommand($sql)->execute();
- }
- $outerTransaction->commit();
- }catch(\Exception $e){
- $runClient = false;
- $outerTransaction->rollback();
- }
- return $runClient;
- }
- /**
- * interface @Override
- */
- public function getYiiDbConnection()
- {
- if($this->db === null)
- {
- $this->db = Yii::$app->db;
- }
- return $this->db;
- }
- }
注意:我的自定义数据库操作类 依赖 Yii::$app->db 这个组件,也就是框架自带的数据库连接组件
然后我们就可以通过 Yii::$app->dbOper 去操作数据库了。
Tags: Yii自定义数据库
- 上一篇:Yii框架布局文件的动态切换操作示例
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)