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 相关文章推荐
56.com视频采集接口程序(PHP)
Sep 22 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
关于svn冲突的解决方法
Jun 21 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 PHP
php集成开发环境详解
Sep 24 PHP
php实现的数组转xml案例分析
Sep 28 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中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
python求pi的方法
2014/10/08 Python
Python中装饰器的一个妙用
2015/02/08 Python
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
Django时区详解
2019/07/24 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
python 写一个性能测试工具(一)
2020/10/24 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
新年晚会主持词
2014/03/24 职场文书
旅游节目策划方案
2014/05/26 职场文书
会计工作岗位职责
2015/02/03 职场文书
婚姻出轨保证书
2015/05/08 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
春季运动会加油词
2015/07/18 职场文书