首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-09-09 
给YII框架增加动态模型支持给YII框架增加动态模型支持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;

}

}


*/

热点排行