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 面向对象程序设计
Feb 13 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
php计算整个目录大小的方法
Jun 19 PHP
thinkPHP实现将excel导入到数据库中的方法
Apr 22 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
PHP单态模式简单用法示例
Nov 16 PHP
PHP Include文件实例讲解
Feb 15 PHP
PHP如何获取Cookie并实现模拟登录
Jul 16 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代码运行时间查看类代码分享
2011/08/06 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
php格式化日期实例分析
2014/11/12 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Python greenlet实现原理和使用示例
2014/09/24 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python 的列表遍历删除实现代码
2020/04/12 Python
Python提取网页中超链接的方法
2016/09/18 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
交警正风肃纪剖析材料
2014/10/29 职场文书
销售2014年度工作总结
2014/12/08 职场文书
2015年教师新年寄语
2014/12/08 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书