YII动态模型(动态表名)支持分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-07-22 11:31:07 浏览: 评论:0
这篇文章主要介绍了YII动态模型(动态表名)支持,分析了动态模型的原理并结合实例形式给出了相关使用方法,需要的朋友可以参考下。
本文分析了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;
- }
- }
- */
Tags: YII动态模型 YII动态表名
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)