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;

}

}


*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值