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{ ...
随机推荐
- 地图 ajax-数据库
通过数据库和ajax方法写出地图 客户端部分:html.js.css代码部分: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transit ...
- 十七、Android学习笔记_Android 使用 搜索框
1.在资源文件夹下创建xml文件夹,并创建一个searchable.xml: android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggesti ...
- python中字典dict pop方法
首先引用下pythondoc pop(key[, default]) If key is in the dictionary, remove it and return its value, else ...
- 【原创】Tomcat集群环境下对session进行外部缓存的方法(2)
Session对象的持久化比较麻烦,虽然有序列化,但是并不确定Session对象中保存的其他信息是否可以序列化,这可能是网上很多解决方案摒弃此种做法的原因,网上的很多做法都是将Session中的att ...
- jquery $.trim()方法使用介绍
$.trim(str)的作用是去掉字符串首尾空格 $.trim(str) 返回:string: 说明:去掉字符串首尾空格. 示例: 先看个错误代码: <input type="text ...
- UI1_UITableViewHomeWork
// // AppDelegate.m // UI1_UITableViewHomeWork // // Created by zhangxueming on 15/7/14. // Copyrigh ...
- UI2_视图切换ViewController
// // SubViewController.h // UI2_视图切换 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015 ...
- Ueditor 1.4.3 单独调用上传图片,或文件功能
第一步, 引入文件 <script src="ueditor/ueditor.config.js" type="text/javascript" char ...
- Angular2中的metadata(元数据)
@Attrubute() 从host element 中获得普通(不是@Input)属性对应的值 适用于组件嵌套或指令, 从父组件向子组件传递数据 app.component.ts import {C ...
- 南阳理工oj88--汉诺塔(一)
题目链接.http://acm.nyist.net/JudgeOnline/problem.php?pid=88 #include <stdio.h> /* //测试一下49999和500 ...