YII动态模型(动态表名)支持分析


Posted in PHP onMarch 29, 2016

本文分析了YII动态模型(动态表名)支持机制。分享给大家供大家参考,具体如下:

给YII 框架增加动态模型支持

Yii框架中的数据模型使用静态机制,如果要使用模型方式操作某张数据表,就必须得事先创建数据表对应的模型类(位于 protected/models 目录下),这种方式,在有的情况下给我们的工作带来了一些不便,如仅仅将数据表进行显示,或者数据表是动态生成的,或者要实现数据表模型中的读写分离,(如数据写入与数据呈现逻辑可能定义到不同的模型中,以提高性能,如前后台的分离)。

为解决这个问题,经过我反复调试,已经为Yii 扩展出了动态数据表模型支持,使用时简单提供表名,即可将其当作普通的数据表模型进行操作,当然带来的问题就是无数据验证。即使是这样,也给数据显示带来极大的方便。如果在使用的过程中有任何问题,可随时联系笔者信箱 zhangxugg@163.com 进行探讨或索取源码。

处理方法如下:

请将我提供的DbTable.php 放置到 protected/models/ 目录下,然后就可以在任何位置使用之。

产生新记录:

$memo = new DTable('{{memo}}');
$memo->msg = 'this is content';
$memo->save();
//last insertid
echo $memo->id ;

读取已有记录:

$memo = DTable::model('{{memo}}')->findByPk(12);
$memo->msg = "modefid content";
$memo->save();
//使用非默认数据库,需要在 config/main.php 文件中定义数据库连接,如: 
'components' => array(
'db-other'=>array(
      'class' => 'CDbConnection',
      'connectionString' => 'mysql:host=localhost;dbname=cdcol;charset=utf8',
      'username' => 'root',
      'password' =>'',
      'tablePrefix' => '',
      'autoConnect' => false,
),
);
DTable::$db = Yii::app()->getComponent('db-other');
$memo = DTable::model('{{memo}}')->findByPk(12);

Dynamic  model supports  for Yii framework 1.1.10

/**
* DTable class file.
* @author zhangxugg@163.com
* @since Yii 1.1.10
* @package application.models
* @version $Id DTable.php 1 2012-03-24 23:29 $
DTable provides dynamic table model supports for some application entironment such as dynamic-generated database tables, or simple read actions. 
please contact zhangxugg@163.com for the source code.

new record :

$model = new DTable('table_name'); 
//use table prefix:
$model = new DTable('{{table_name}}');
$model->id = $id;
$model->name = 'zhangxugg@163.com';
$model->save();

update:

$model = DTable::model('{{table_name}}')
$model->name = 'zhangxugg@163.com'
$model->save();
$list = $model->findAll();
use non-default database connection :
DTable::$db = Yii::app()->getCompoments('db-extra');

tips : you must define the database connection informations in config/main.php

'components' => array(
   'db-extra' => array(
     'class' => 'CDbConnection',
     'connectionString' => 'mysql:host=localhost;dbname=cdcol;charset=utf8',
     'username' => 'root',
     'password' =>'',
     'tablePrefix' => '',
     'autoConnect' => false,
   ),
)

DTable source code :

class DTable extends CActiveRecord {
  private static $tableName ;
  public function __construct($table_name = '') {
    if($table_name === null) {
      parent::__construct(null);
    } else {
      self::$tableName = $table_name ;
      parent::__construct();
    }
  }
public static function model($table_name='')
{
  self::$tableName = $table_name ;
  return parent::model(__CLASS__);
}
public function tableName()
{
return self::$tableName;
}
}
*/

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
PHP函数getenv简介和使用实例
May 12 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
Yii2单元测试用法示例
Nov 12 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
PHP自动识别当前使用移动终端
May 21 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP设计模式(观察者模式)
Jul 07 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 #PHP
Yii数据库缓存实例分析
Mar 29 #PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 #PHP
Yii框架上传图片用法总结
Mar 28 #PHP
Yii开启片段缓存的方法
Mar 28 #PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 #PHP
CI映射(加载)数据到view层的方法
Mar 28 #PHP
You might like
简单理解PHP的面向对象编程方式
2016/05/17 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python如何生成树形图案
2018/01/03 Python
Django自定义用户认证示例详解
2018/03/14 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
进修护士自我鉴定
2013/10/14 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
授权委托书怎么写
2014/04/03 职场文书
行政诉讼答辩状
2015/05/21 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle