给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;
}
}
*/