`
月影无痕
  • 浏览: 1009680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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;

}

}


*/

0
0
分享到:
评论
4 楼 额_不可以 2013-11-13  
支持、正好在找这个!!!!!!!!!
3 楼 微笑看世界 2013-05-07  
class IncomeFactory extends Income
{
    private static $_tableName = '{{income}}';

    /**
     * @param string $tableName
     * @return IncomeFactory|void
     */
    public static function models($tableName)
    {
        self::$_tableName = '{{income_' . $tableName . '}}';
        return parent::model(__CLASS__);
    }


    public function tableName()
    {
        return self::$_tableName;
    }
}
2 楼 sys2009 2012-12-24  
感谢,必须支持
1 楼 zxsz4085 2012-05-09  
google 搜索 “yii model动态表名” 第一条 就过来了。正好用上了。 

相关推荐

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

    在本文中,将介绍YII框架中动态模型(动态表名)的支持机制,这是为了解决直接操作数据表时出现的限制,并提供一种更灵活的数据模型操作方式。在传统的YII框架中,数据模型采用静态机制,对于每张数据表都必须事先...

    Yii操作数据库实现动态获取表名的方法

    在某些情况下,我们可能需要动态地获取数据库中的表名,尤其在数据库结构不确定或者需要频繁切换不同数据库时。本文将详细介绍如何在Yii框架中实现这一功能。 首先,我们需要了解Yii的数据库访问层(DB Access ...

    yii的小部件使用

    - 按照提示输入模型的相关信息,例如模型名称、数据库表名等。 - 生成完成后,模型类会自动保存到相应的目录下。 4. **生成CRUD**: - 在gii工具中选择“生成CRUD”选项。 - 输入模型类的命名空间。 - 根据...

    yii中gii自动生成模板中文化步骤及下载

    - 保存并刷新Gii管理界面,选择`crud`生成器,填写相应的模型类名和表名。 - 在生成代码时,Gii会使用你指定的中文模板生成代码。生成的代码中,表单元素的提示和按钮文字应已经显示为中文。 4. 考虑到多语言支持...

    Yii中Model(模型)的创建及使用方法

    其中,Model(模型)是Yii框架的三大主要组件之一(另外两个是View视图和Controller控制器),模型通常用于处理数据和业务逻辑。...掌握Yii模型的创建和使用,对于使用Yii框架开发Web应用来说是基础且重要的技能。

    Yii_Cookbook

    - **实现方式**:配置Eclipse PDT以支持Yii框架的代码补全、快速导航等功能。 ##### 10. 启用Gzip压缩 - **知识点**:了解如何在Yii应用中启用Gzip压缩功能。 - **实现方式**:通过修改`.htaccess`文件或Web...

    YII 快速创建项目GII

    2. **生成模型**:在GII中选择模型生成器,输入`users`作为表名,生成`User`模型类。模型类将包含对数据库表的操作方法。 3. **生成控制器**:接着生成控制器,选择`CRUD`模板,指定`User`模型。GII会自动创建`...

    实例讲解YII2中多表关联的使用方法

    在YII中,如果想直接关联其他表进行查询的话,需要先在模型里定义它们的关联 Order class Order extends \yii\db\ActiveRecord.{ // 关联函数以get+要关联的数据表名来命名 // 这是获取下订单的客户 public ...

    Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)

    7. **Yii操作数据库**:Yii2提供了ActiveRecord模式,通过模型类可以直接操作数据库,动态获取表名可以通过`tableName()`方法实现。 8. **分类下的所有子类获取**:在Yii2的ActiveRecord模型中,可以通过关联查询...

    yii用户注册表单验证实例

    在Yii框架中,模型层代表应用程序的业务逻辑和数据模型。对于用户注册而言,开发者需要创建一个与用户数据表对应的模型类,该模型类继承自CActiveRecord。在模型层需要定义数据表名称、属性标签、数据验证规则等。 ...

    Yii多表联合查询操作详解

    在这个类中,我们定义了表名、字段、数据验证规则以及模型之间的关联关系。例如,模型中的'relationType'关联指向关系类型模型SocialRelationType,'user'和'anotherUser'关联指向用户模型AccessUser。通过这些关联...

    Yii2如何批量添加数据

    Yii2框架支持多种数据操作方式,其中批量插入数据的方式主要是通过`batchInsert`方法实现。这种方法相比逐条插入数据来说,效率更高,因为它减少了与数据库的交互次数,降低了资源消耗。 在Yii2中进行批量插入数据...

    yii2-sortable-widgets:用于Yii2的RubaxaSortable

    Yii2 Sortable小部件 Yii2小部件的实现Rubaxa / Sortable。 支持的: GridView小部件。用法创建一个新的迁移,从扩展名将父类更改为迁移类,并指定表名属性: class m140811_131705_Models_order extends \...

    详解yii2使用多个数据库的案例

    Yii2框架通过配置文件main.php和params.php来支持多数据库配置。在main.php中配置数据库连接信息和权限管理器,而在params.php中配置业务相关的表位置。下面将详细介绍配置步骤和相关知识点。 1. 配置多个数据库...

    浅析Yii中使用RBAC的完全指南(用户角色权限控制)

    这些表可以通过执行Yii框架提供的schema.sql文件来创建,并需要确保表名与配置文件中的自定义表名一致。 RBAC的基本概念包括操作(Operations)、任务(Tasks)和角色(Roles)。操作是最基本的权限单位,不可再分...

    Yii框架实现对数据库的CURD操作示例

    当使用Yii框架进行Web开发时,首先需要创建一个与数据库表名相同的模型类。例如,如果数据库中存在一个名为user的表,则可以创建一个User模型类。模型类通常放置在models文件夹中,并继承自yii\db\ActiveRecord类。...

    Yii2框架操作数据库的方法分析【以mysql为例】

    除了上述提到的增删改查操作,Yii2还支持更高级的数据库操作,比如事务处理。事务处理可以确保一组数据库操作要么全部成功,要么全部失败,这对于保证数据的完整性和一致性是非常重要的。 此外,Yii2还提供了Active...

Global site tag (gtag.js) - Google Analytics