YII框架分析笔记4:ar模型和db
来源:互联网 发布:acdsee mac pro注册码 编辑:程序博客网 时间:2024/06/04 18:55
YII中实现两种类型的模型,分别是表单模型和活动记录。在持久化数据方面,YII只实现了活动记录,对于复杂的数据关系可以用框架提供的DAO来自己写model,对应集成doctrine这样的ORM还没有仔细研究过。
ar模型
框架中的model是CModel子类,CModel主要是一些验证与错误处理,并实现迭代器和数组访问接口,活动记录模型CActiveRecord是AR模型的基类。
实例化model有两种方法,直接new一个新的实例,或者用静态方法mode(),后者与前者的区别是略过构造函数执行的代码(主要是避免元数据的多次获取),用静态方法mode()创建ar对象经过一下步骤:
//$model::model($class)$model=self::$_models[$className]=new $className(null);//创建一个mode实例 new CActiveRecordMetaData($model)//创建元数据类//1、获取表模式实例$model->getDbConnection() //获取数据库连接->getSchema()//获取数据库schema->getTable($tableName)//获取表shema->loadTable()//获取表对象->findColumns()//获取表中列对象以及其中的约束->findConstraints()//获取表约束(代码实际上是外键关系)//2、主键配置//3、添加关系(关系包括BELONGS_TO、HAS_ONE、HAS_MANY、MANY_MANY、STAT)$model->attachBehaviors($model->behaviors());//添加行为上面流程下来会遇到一个问题,每一次创建model都会执行"SHOW COLUMNS FROM $tableName"和"SHOW CREATE TABLE $tableName"的查询,在高并发下会影响性能。可以在主配置文件中的数据库配置中添加schemaCachingDuration和schemaCacheID的配置来缓存数据库schema,前者是设置缓存的时间,后者是缓存组件的id,但缓存带来的问题是修改数据库中表结构不能立即生效,所以在生产环境下写一个刷新缓存的脚本是又必要的。
DAO
ar模型带来的好处是将开发中SQL语句的编写减到最小,ar模型既封装了数据库记录的状态和持久化到数据库的访问方法,也封装了业务逻辑,这在关系不是很复杂的应用中带来的好处显而易见,但如果数据库关系复杂,业务逻辑复杂,有必要将对数据的操作单独提出来,YII中的DAO就是将业务逻辑和数据交换分开,也降低了业务和数据库的耦合性。
YII中DAO基于PDO,统一的接口可以访问不同的数据库管理系统。在框架中CDbConnection、CDbCommand、CdbDataReader、CDbTransaction类分别管了数据量的连接、命令、读取和事务。
YII还对数据库的schema进行映射,一个数据库是对应一个对象,一个表对应一个对象,一列对应一个对象,这些对象分别封装其对应schema的一些操作。
- YII框架分析笔记4:ar模型和db
- 【Yii】AR模型和db
- YII框架分析笔记3:表单模型和验证
- Yii AR模型
- Yii框架ar
- YII框架分析笔记2:组件和事件行为管理
- YII框架分析笔记5:控制器和动作
- yii框架AR模式整合
- Yii框架 AR 基础操作
- Yii 学习笔记(AR)
- YII框架分析笔记6:视图
- YII框架分析笔记7:挂件widget
- YII框架分析笔记8:CDataProvider
- YII框架分析笔记9:url路由
- YII框架分析笔记10:日志
- YII框架分析笔记11:模块module
- YII框架分析笔记12:主题管理
- YII框架分析笔记13:单元测试
- 麦当劳在Pinterest上成功营销的7个独门诀窍
- 71道经典Android面试题和答案--重要知识点都涉及到了
- 启动MixerThread
- Git版本控制使用方法入门教程
- AIX上安装 gcc
- YII框架分析笔记4:ar模型和db
- java 读取文件方法大全
- Bad version number in .class file
- struts2 和普通html form的路径问题!
- 自己根据网上的js小游戏改编的(看谁能坚持的时间最长)
- Linux下使用SSH客户端及其Sftp文件传送
- oracle存储过程中使用临时表
- 心态和想法,是提高编程水平的关键
- delphi下调用外部程序,并知道其何时退出