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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架