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

2025-05-29 0 62

本文分析了YII动态模型(动态表名)支持机制。分享给大家供大家参考,具体如下:

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

Yii框架中的数据模型使用静态机制,如果要使用模型方式操作某张数据表,就必须得事先创建数据表对应的模型类(位于 protected/models 目录下),这种方式,在有的情况下给我们的工作带来了一些不便,如仅仅将数据表进行显示,或者数据表是动态生成的,或者要实现数据表模型中的读写分离,(如数据写入与数据呈现逻辑可能定义到不同的模型中,以提高性能,如前后台的分离)。

为解决这个问题,经过我反复调试,已经为Yii 扩展出了动态数据表模型支持,使用时简单提供表名,即可将其当作普通的数据表模型进行操作,当然带来的问题就是无数据验证。即使是这样,也给数据显示带来极大的方便。如果在使用的过程中有任何问题,可随时联系笔者信箱 zhangxugg@163.com 进行探讨或索取源码。

处理方法如下:

请将我提供的DbTable.php 放置到 protected/models/ 目录下,然后就可以在任何位置使用之。

产生新记录:

?

1

2

3

4

5
$memo = new DTable('{{memo}}');

$memo->msg = 'this is content';

$memo->save();

//last insertid

echo $memo->id ;

读取已有记录:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
$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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63
/**

* 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;

}

}

*/

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 YII动态模型(动态表名)支持分析 https://www.kuaiidc.com/98062.html

相关文章

发表评论
暂无评论