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的ob_start();控制您的浏览器cache!
Nov 25 PHP
PHP多个版本的分析解释
Jul 21 PHP
php json_encode奇怪问题说明
Sep 27 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
YII2.0之Activeform表单组件用法实例
Jan 09 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 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
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
初识Node.js
2015/03/20 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
微信小程序实现星级评价效果
2018/12/28 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
Python Selenium库的基本使用教程
2021/01/04 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
教师求职信范文分享
2013/12/27 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL