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中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
May 31 PHP
Laravel框架查询构造器简单示例
May 08 PHP
thinkphp5实现微信扫码支付
Dec 23 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
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
php画图实例
2014/11/05 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
JavaScript 特殊字符
2007/04/05 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
python实现二分查找算法
2017/09/21 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
python逆向入门教程
2018/01/15 Python
Python字符串三种格式化输出
2020/09/17 Python
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
大学生求职中的自我评价
2013/10/01 职场文书
运动会广播稿500字
2014/01/28 职场文书
简历的自我评价
2014/02/03 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
《荷花》教学反思
2014/04/16 职场文书
车辆工程专业求职信
2014/06/14 职场文书
理财计划书
2014/08/14 职场文书
食品安全汇报材料
2014/08/18 职场文书
2014年会计工作总结
2014/11/27 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
综合管理员岗位职责
2015/02/11 职场文书
高中历史教学反思
2016/02/19 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
python元组打包和解包过程详解
2021/08/02 Python
JavaScript 数组去重详解
2021/09/15 Javascript