当前位置:首页 > CMS教程 > 其它CMS > 列表

YII动态模型(动态表名)支持分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-22 11:31:07 浏览: 评论:0 

这篇文章主要介绍了YII动态模型(动态表名)支持,分析了动态模型的原理并结合实例形式给出了相关使用方法,需要的朋友可以参考下。

本文分析了YII动态模型(动态表名)支持机制,分享给大家供大家参考,具体如下:

给YII 框架增加动态模型支持

Yii框架中的数据模型使用静态机制,如果要使用模型方式操作某张数据表,就必须得事先创建数据表对应的模型类(位于 protected/models 目录下),这种方式,在有的情况下给我们的工作带来了一些不便,如仅仅将数据表进行显示,或者数据表是动态生成的,或者要实现数据表模型中的读写分离,(如数据写入与数据呈现逻辑可能定义到不同的模型中,以提高性能,如前后台的分离)。

为解决这个问题,经过我反复调试,已经为Yii 扩展出了动态数据表模型支持,使用时简单提供表名,即可将其当作普通的数据表模型进行操作,当然带来的问题就是无数据验证。即使是这样,也给数据显示带来极大的方便。如果在使用的过程中有任何问题,可随时联系笔者信箱 zhangxugg@163.com 进行探讨或索取源码。

处理方法如下:

请将我提供的DbTable.php 放置到 protected/models/ 目录下,然后就可以在任何位置使用之。

产生新记录:

  1. $memo = new DTable('{{memo}}'); 
  2. $memo->msg = 'this is content'
  3. $memo->save(); 
  4. //last insertid 
  5. echo $memo->id ; 

读取已有记录:

  1. $memo = DTable::model('{{memo}}')->findByPk(12); 
  2. $memo->msg = "modefid content"
  3. $memo->save(); 
  4. //使用非默认数据库,需要在 config/main.php 文件中定义数据库连接,如:  
  5. 'components' => array
  6. 'db-other'=>array
  7.       'class' => 'CDbConnection'
  8.       'connectionString' => 'mysql:host=localhost;dbname=cdcol;charset=utf8'
  9.       'username' => 'root'
  10.       'password' =>''
  11.       'tablePrefix' => ''
  12.       'autoConnect' => false, 
  13. ), 
  14. ); 
  15. DTable::$db = Yii::app()->getComponent('db-other'); 
  16. $memo = DTable::model('{{memo}}')->findByPk(12); 
  17. Dynamic  model supports  for Yii framework 1.1.10 
  18.  
  19. /** 
  20. * DTable class file. 
  21. * @author zhangxugg@163.com 
  22. * @since Yii 1.1.10 
  23. * @package application.models 
  24. * @version $Id DTable.php 1 2012-03-24 23:29 $ 
  25. DTable provides dynamic table model supports for some application entironment such as dynamic-generated database tables, or simple read actions.  
  26. please contact zhangxugg@163.com for the source code. 
  27.  
  28. new record : 
  29.  
  30. $model = new DTable('table_name');  
  31. //use table prefix: 
  32. $model = new DTable('{{table_name}}'); 
  33. $model->id = $id; 
  34. $model->name = 'zhangxugg@163.com'; 
  35. $model->save(); 
  36.  
  37. update: 
  38.  
  39. $model = DTable::model('{{table_name}}') 
  40. $model->name = 'zhangxugg@163.com' 
  41. $model->save(); 
  42. $list = $model->findAll(); 
  43. use non-default database connection : 
  44. DTable::$db = Yii::app()->getCompoments('db-extra'); 
  45.  
  46. tips : you must define the database connection informations in config/main.php 
  47.  
  48. 'components' => array( 
  49.    'db-extra' => array( 
  50.      'class' => 'CDbConnection', 
  51.      'connectionString' => 'mysql:host=localhost;dbname=cdcol;charset=utf8', 
  52.      'username' => 'root', 
  53.      'password' =>'', 
  54.      'tablePrefix' => '', 
  55.      'autoConnect' => false, 
  56.    ), 
  57. ) 
  58.  
  59. DTable source code : 
  60.  
  61. class DTable extends CActiveRecord { 
  62.   private static $tableName ; 
  63.   public function __construct($table_name = '') { 
  64.     if($table_name === null) { 
  65.       parent::__construct(null); 
  66.     } else { 
  67.       self::$tableName = $table_name ; 
  68.       parent::__construct(); 
  69.     } 
  70.   } 
  71. public static function model($table_name='') 
  72. { 
  73.   self::$tableName = $table_name ; 
  74.   return parent::model(__CLASS__); 
  75. } 
  76. public function tableName() 
  77. { 
  78. return self::$tableName; 
  79. } 
  80. } 
  81. */

Tags: YII动态模型 YII动态表名

分享到: