Daject初探 - 从Table模型得到Record模型
前言:
如果你还不知道Daject是什么,如何使用,可以浏览 http://www.cnblogs.com/kason/p/3577359.html
github地址:https://github.com/kasonyang/Daject
前两篇博文简单介绍了Daject的两种模型--Table模型和Record模型。细心的朋友可能会发现,Table模型通过select方法读取到的数据只是一些简单的数组,也就是说,通过select方法得到的是简单得数据数组,而不是Record模型。如果你的Record模型并没有进行进行过任何拓展,这似乎无所谓,但是如果你的Record模型进行了扩展,如果只是返回一些简单得数组数据,你对Record模型的任何拓展就派不上什么用途了。
事实上,Daject是支持直接从Table模型直接读取到Record模型的,那就是selectObject方法。
先上代码
//假定数据库里有一张名为user的表,字段为id,name,age,主键为id
class UserTable extends DajectTableBase{
protected $keys = array('id');
}
class User extends DajectRecordBase{
function sayHi(){
echo 'Hi,i am ' . $this->name . '!';
}
}
$tb = new UserTable();
$users = $tb->selectObject(10);//读取10条记录
foreach($users as $u){
$u->age = $u->age + 1;//将记录的age字段值增1
$u->sayHi();//$u是User的实例
}
selectObject和select接受的参数是一样的,差别只是返回的结果不一样,前者返回的是Record数组,而后者返回的是是字段值数组,实际使用时,我更推荐使用selectObject读取数据,因为返回Record模型更能体现OOP的思想,最重要的是Record模型比字段值数组用起来方便!
注意:并不是任何情况下selectObject都能使用的,一般情况下,从未调用field方法,或者已经已经调用field('*')将字段设置为"*"的情况下,才能使用selectObject。比如以下的代码是有问题的
$tb = new UserTable();
$tb->field('count(*)');
//field已被设置为"count(*)",调用selectObject将会出错
$users = $tb->selectObject();
Daject初探 - 从Table模型得到Record模型的更多相关文章
- Daject初探之Record模型
上一篇博文我简单介绍了Daject以及Daject的Table模型,Table模型是对一张数据表的抽象,从数据表的级别处理数据,而Record模型是对单条数据记录的抽象,从记录的级别处理数据. 这一篇 ...
- table方法也属于模型类的连贯操作方法之一
table方法也属于模型类的连贯操作方法之一,主要用于指定操作的数据表. 用法 一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了: 切换操作的数据表 ...
- ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )
//TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: publ ...
- ThinkPHP 数据库操作之数据表模型和基础模型 ( Model )
一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: public function te ...
- Asp.net管道模型(管线模型)
Asp.net管道模型(管线模型) 前言 为什么我会起这样的一个标题,其实我原本只想了解asp.net的管道模型而已,但在查看资料的时候遇到不明白的地方又横向地查阅了其他相关的资料,而收获比当初预 ...
- linux下多路复用模型之Select模型
Linux关于并发网络分为Apache模型(Process per Connection (进程连接) ) 和TPC , 还有select模型,以及poll模型(一般是Epoll模型) Select模 ...
- Paip.Php Java 异步编程。推模型与拉模型。响应式(Reactive)”编程FutureData总结... 1
Paip.Php Java 异步编程.推模型与拉模型.响应式(Reactive)"编程FutureData总结... 1.1.1 异步调用的实现以及角色(:调用者 提货单) F ...
- DDD:谈谈数据模型、领域模型、视图模型和命令模型
背景 一个类型可以充当多个角色,这个角色可以是显式的(实现了某个接口或基类),也可以是隐式的(承担的具体职责和上下文决定),本文就讨论四个角色:数据模型.领域模型.视图模型和命令模型. 四个角色 数据 ...
- ML 04、模型评估与模型选择
机器学习算法 原理.实现与实践——模型评估与模型选择 1. 训练误差与测试误差 机器学习的目的是使学习到的模型不仅对已知数据而且对未知数据都能有很好的预测能力. 假设学习到的模型是$Y = \hat{ ...
随机推荐
- 第一章 响应式设计之Media Quer
书里谈到尽量不要使用Media Queriy. 但是过多使用media query,会导致CSS变得脆弱和页面难以维护.一些方法可以减少页面使用 media query. 响应式设计: (1) 使用百 ...
- backbone.Model 源码笔记
backbone.Model backbone的model(模型),用来存储数据,交互数据,数据验证,在view里面可以直接监听model来达到model一改变,就通知视图. 这个里面的代码是从bac ...
- 百度编辑器UEditor,地址栏传值长度有限-在webConfig配置
<system.web> <httpRuntime requestValidationMode=" ></httpRuntime> <compila ...
- 《iOS开发指南》要改iOS8版本了,听听您的意见?
<iOS开发指南>要改iOS8版本了,听听您的意见?参加问卷同学均可获得智捷课堂50元代金卡一张,同时抽取一名同学赠送即将出版的基于iOS8的<iOS开发指南>一本,欢迎大家填 ...
- IOS自定义场景切换动画。
IOS中我们可以通过Storyborad以及segue来实现我们自己的场景切换动画,新建项目使用Single View Application模板并取名为MyCustomSegue. 使用storyb ...
- NSString和NSArray平时练习总结
/*************************字符串练习****************************/ //创建字符串 //1.快速创建 NSString *str1 = @&quo ...
- 密码强度的js插件(完成)
效果如下图: 低:
- javaScript中的数组迭代方法
ECMAScript5为数组定义了5个迭代方法. 每个方法都接收两个参数:要在每一项上运行的函数 和 (可选的)运行该函数的作用域对象. 传入这些方法中的函数会接收三个参数:数组项的值,该项在数组 ...
- 向php文件中添加php.ini文件
向php文件中添加php.ini文件 默认情况下,php是没有php.ini配置文件的,必须手工添加php.ini文件 在php安装目录中,复制php.ini文件到/usr/local/php/lib ...
- 《HTML5与CSS3基础教程》学习笔记 ——Four Day
第十六章 1. 输入和元素 电子邮件框 <input type="email"> 搜索框 <input type="search"> ...