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 相关文章推荐
文件系统基本操作类
Nov 23 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
php生成图片验证码
Jun 09 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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动态生成JavaScript代码
2009/03/09 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
php格式化电话号码的方法
2015/04/24 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
学校万圣节活动方案
2014/02/13 职场文书
医院信息公开实施方案
2014/05/09 职场文书
红色故事演讲稿
2014/05/22 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
地雷战观后感
2015/06/09 职场文书
素质拓展训练感想
2015/08/07 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python