yii model层操作总结
yii model层操作属性和方法总结。
tableName – 设置Model所对应的表名,例如:
public function tableName(){return 'gshop_order_ext';}
rules – 设置Model里各字段的验证规则
relations – 设置关联规则
attributeLabels – 设置各字段的别名
safeAttributes – 设置可以修改属性的字段
beforeValidate和afterValidate – 字段验证前和验证后执行的函数, 需要返回true值
beforeSave和afterSave – 记录存储前和存储后执行的函数, 需要返回true值
其次, Yii里的ORM使用的是AR, 有几个主要的操作, 分别是:
save – 操作数据
update – 修改数据
delete – 删除数据
validate – 验证数据
读取记录时, 有以下几个方法:
findByPk – 通过主键查找记录, 结果为单条记录
findByAttribute – 通过属性查找记录, 结果为单条记录
findAllByAttributes – 通过属性查找数据, 结果为记录集
findAll – 通过CDbCriteria对象查找数据, 结果为记录集 *
查找方法接收的参数有2种, 没有星号的, 接受数组作为参数, 有星号的接收CDbCriteria对象作为参数, 使用对象的时候, 可以提供更多的查找条件, 下面给出一个实例:
$criteria = new CDbCriteria; // 创建CDbCriteria对象
$criteria->condition = 'title LIKE %' . 'php' . '%'; // 设置查询条件
$criteria->order = 'createdTime DESC'; // 设置排序条件
$criteria->limit = 10; // 限定记录的条数
$criteria->select = 'id,title,content'; // 设置结果所包含的字段
$articles = Article::model()->findAll($criteria); //结果为数组, 其中每个元素为记录对象
再次, Yii对关联数据默认采用LazyLoad的加载形式, 即需要时才读取. 这样, 当我们不需要关联数据的时候, Yii是不会帮我们去读取的, 大大加快了反应的速度. 但是也有一些时候, 我们是需要关联数据的, 比如说读取文章的时候, 我们是需要文章所属的分类的, 如果使用LazyLoad的形式, 就要有多少条, 查询多少次, 效率非常低下, 这时就需要EagerLoad了, 即一次把关联表的数据全部读出.
比如:
1 |
$articles = Article::model()->with('category')->findAll(); |
使用with将关联表的数据一次全部读出. 关联表的设置在Model里的relation里设置.
比如:
1 |
public function relations() { |
2 |
return array( |
3 |
'category' => array(self::BELONGS_TO, 'Category', 'categoryId'), |
4 |
); |
5 |
} |
非常的清晰明了。
yii model层操作总结的更多相关文章
- DjangoMTV模型之model层——ORM操作数据库(基本增删改查)
Django的数据库相关操作 对象关系映射(英语:(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说 ...
- CI的model层的操作
1.需求 整理ci框架下model层的相关操作 2.代码 model的代码,放在application/model目录下,文件名为Coupon.php <?php class Coupon ex ...
- PHP MVC 中的MODEL层
Model层,就是MVC模式中的数据处理层,用来进行数据和商业逻辑的装封 三.实现你的Mode层 Model层,就是MVC模式中的数据处理层,用来进行数据和商业逻辑的装封,进行他的设计的时候设计到三个 ...
- 读书笔记_MVC__关于通过js构建ORM,实现Model层
最近一直在学习MVC构建富应用的WEB程序,自己一直对MVC的设计模式理解的不是十分透彻,终于在研读了github上Spine的源码之后,对构建Model层有了一点自己的理解. 本文仅为个人理解,如有 ...
- Object.defineProperties——MEAN开发后台的Model层
Object.defineProperties是什么?有什么用? 这个问题比较听起来可能比较难以理解,确实我也是在项目中遇到的才会去想.以前看到<高级程序设计>的时候,有这么一种东西,定义 ...
- 深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用
SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致 ...
- Yii createCommand CURD操作
本文用作工作记录,也许有人会问为什么不用 Yii 的 Model 去操作 DB,原因很简单,Yii 的 Model 写法上是方便了很多,但是会执行多余的 SQL,打开 Yii 的执行 log 就会发现 ...
- 2013/11/22工作随笔-缓存是放在Model层还是放在Controller层
web网站的典型代码框架就是MVC架构,Model层负责数据获取,Controller层负责逻辑控制,View层则负责展示. 一般数据获取是去mysql中获取数据 但是这里有个问题,我们不会每次请求都 ...
- js 实现angylar.js view层和model层双绑定(改变view刷新 model,改变model自动刷新view)
近段时间研究了下angular.js 觉得它内部实现的view和model层之间存在很微妙的关系,如下图 如上图说的,view的改变会update 数据层model, 数据层会update视图层vie ...
随机推荐
- 网络流(一)——Edmonds Karp算法
首先是一些关于网络流的术语: 源点:即图的起点. 汇点:即图的终点. 容量:有向边(u,v)允许通过的最大流量. 增广路:一条合法的从源点流向汇点的路径. 网络流问题是在图上进行解决的,我们通常可以将 ...
- paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(三段式)
Three always block style with registered outputs(Good style)
- 21.Yii2.0框架多表关联一对多查询之性能优化--模型的使用
控制器里 功能: 通过分类,查分类下的所有文章 //关联查询 public function actionRelatesearch(){ //关联查询 //查询方法一(查一行) 一维数组下的值是obj ...
- 剑指Offer(书):顺时针打印数组
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...
- XenServer 6.5 安装
为了方便截图我下面的所有操作都是在VMware Workstation 11 上面完成的,但在之后的所有Citrix产品的操作中都将会在物理环境完成,物理机安装XS的步骤和下面是相同的. 1.打开Wo ...
- Python ORM
本章内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果 ...
- django 的序列化
关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. 我们从数据库取出数据的格式有三种:1.all()返回的是QuerySet对象:2 ...
- WebService的简介, 原理, 使用,流程图
WebService的简介, 原理, 使用 第一部分: 直观概述 WebService的几种概念: 以HTTP协议为基础,通过XML进行客户端和服务器端通信的框架/组件 两个关键点: 1. ...
- 内存分配机制malloc&&alloca&&realloc
<1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2>在栈上创建 在执 ...
- [Err] 1022 - Can't write; duplicate key in table '#sql-1500_26'
今天用powerdesigner修改了一些外键关系,有两个外键的名字取一样的,忘记改了.然后在用navicat运行sql文件时,报出[Err] 1022 - Can't write; dupl ...