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 相关文章推荐
ExtJS与PHP、MySQL实现存储的方法
Apr 02 PHP
PHP 多维数组排序(usort,uasort)
Jun 30 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
php生成shtml类用法实例
Dec 09 PHP
php提高网站效率的技巧
Sep 29 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
thinkphp5实现无限级分类
Feb 18 PHP
PHP7匿名类的用法示例
Apr 05 PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 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基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
物业管理大学生个人的自我评价
2013/10/10 职场文书
审核会计岗位职责
2013/11/08 职场文书
七年级历史教学反思
2014/02/05 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
护理专业自荐信范文
2014/02/26 职场文书
安全生产管理责任书
2014/04/16 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
Win2008系统搭建DHCP服务器
2022/06/25 Servers