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 JSON中文乱码的解决方法详解
Jun 06 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
php实现简单的上传进度条
Nov 17 PHP
php中二分法查找算法实例分析
Sep 22 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
php基于SQLite实现的分页功能示例
Jun 21 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
TP5框架安全机制实例分析
Apr 05 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/09 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
js实现每日签到功能
2018/11/29 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
python3实现windows下同名进程监控
2018/06/21 Python
对python多线程与global变量详解
2018/11/09 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
HTML5新增加的功能详解
2016/09/05 HTML / CSS
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
索桥的故事教学反思
2014/02/06 职场文书
求职面试个人自我评价
2014/02/28 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
施工协议书范本
2014/04/22 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
大学生见习总结报告
2015/06/24 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
SQL写法--行行比较
2021/08/23 SQL Server