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 相关文章推荐
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
PHP attributes()函数讲解
Feb 03 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 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 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
基于zepto.js实现登录界面
2017/10/09 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
Python文件和流(实例讲解)
2017/09/12 Python
python2.7实现爬虫网页数据
2018/05/25 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
教师现实表现材料
2014/02/14 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
爱心捐助倡议书
2014/05/19 职场文书
民事授权委托书范文
2014/08/02 职场文书
广告业务员岗位职责
2015/02/13 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
社区文明倡议书
2015/04/28 职场文书