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 相关文章推荐
input file获得文件根目录简单实现
Apr 26 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
php生成excel文件的简单方法
Feb 08 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
Symfony2联合查询实现方法
Mar 18 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
简单PHP会话(session)说明介绍
Aug 21 PHP
php fread读取文件注意事项
Sep 24 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
python单例模式实例解析
2018/08/28 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
大韩航空官方网站:Korean Air
2017/10/25 全球购物
C#笔试题
2015/07/14 面试题
Hibernate持久层技术
2013/12/16 面试题
预防煤气中毒方案
2014/06/16 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript