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 相关文章推荐
PHP与MySQL交互使用详解
Oct 09 PHP
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
php session 错误
May 21 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 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 ADODB使用方法集锦
2008/03/25 PHP
PHP防注入安全代码
2008/04/09 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
幼儿师范毕业生自荐信
2013/11/09 职场文书
体育教育毕业生自荐信
2013/11/21 职场文书
社会保险接收函
2014/01/12 职场文书
股份转让协议书
2014/04/12 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技