Yii Active Record 动态数据表
来源:互联网 发布:淘宝正版cd卖家推荐 编辑:程序博客网 时间:2024/05/16 07:58
Active Record(AR)是一种流行的 对象-关系映射(ORM)技术,其映射关系为
- AR class:数据表
- AR class property:数据表的一列
- AR 实例:数据表的一条数据
所以对于常用的数据库操作(CRUD)可以转化成一种面向对象的数据操作形式。
实现一个AR类的的最简代码如下:
class Post extends CActiveRecord{ public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return 'tbl_post'; }}
只需重载数据表方法tableName,返回数据表名字即可。
但是现在的问题是,如果数据表的名字不确定,是否可以在插入或者查询时动态的分配数据表的名字。例如,如果对业务中的log流水做查询的工作,我们知道,一般写log时都是每天一张表,例如tbl_log_20140601, tbl_log_20140602, ...。因此没有办法把每天定义成一个AR class。
解决方法如下:
/** Usage:* $result = Log::model()->setDate("20140603")->findAll();*/class Log extends CActiveRecord{ private $_date; public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return "tbl_log_". $this->getDate(); } public function setDate($date){ $this->_date = $date; $this->refreshMetaData(); return $this; } public function getDate(){ if($this->_date === NULL){ $this->setDate("20140601"); } return $this->_date; } }
其使用方法为:
$result = Log::model()->setDate("20140603")->findAll();
在执行Log::model()时,Yii框架会初始化当前的instance,因此会立刻调用tableName(),并且形成一些中间数据(metaData),因此在setDate以后需要调用 refreshMetaData() 来刷新当前已经形成的中间数据。
简要做个笔记,希望对大家有帮助。
1 0
- Yii Active Record 动态数据表
- yii 数据库 Active Record
- YII Active Record 详细解说
- Yii之Active Record find()方法
- Yii Framework 开发教程(26) 数据库-Active Record示例
- Yii Framework 开发教程(27) 数据库-关联Active Record示例
- Yii framwork crud Relational Active Record 笔记二
- Yii Framework 开发教程(26) 数据库-Active Record示例
- Yii Framework 开发教程(27) 数据库-关联Active Record示例
- YII框架中的Relational Active Record 关联操作
- Active Record
- Active Record
- YII Framework学习教程-YII的Model-数据库操作2-Relational Active Record翻译补全
- 开源PHP开发框架Yii全方位教程 (11) Active Record (AR)
- yii提示The table "xxx" for active record class "DistAR" cannot be found in the database
- Active Record simple query
- Active Record Query
- ADOdb Active Record
- TCP/IP、Http、Socket的区别
- commons-lang-*.*.jar 包常用方法集锦
- Html5 本地文件读取 API 研究使用过程中的意外发现 - MDN
- The expression after ELSE should have the same type as those after THEN: "bigint" is expected but "i
- DH key agreement
- Yii Active Record 动态数据表
- 备课笔记--浅学MYSQL
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate
- JPA criteria 查询:类型安全与面向对象
- php实现socket
- 好文章收藏--关于算法、推荐算法、数据挖掘
- HOG参数简介及Hog特征维数的计算
- 数论 D - 寒假安排 --acdream ACdream原创群赛(12)のBUAA选拔赛
- 【Heritrix基础教程之4】开始一个爬虫抓取的全流程代码分析