程序员小助手|3分钟短文:Laravel模型读数据的那个“障眼法”
引言
通过前几篇文章视图和路由的介绍 , 我们通过模型对象操作数据库表 。 laravel模型的精巧设计使得我们操作数据层逻辑更加得心应手 。
文章图片
本文我们来说说模型在读写数据中所使用的技巧 。
日期时间格式化
先从最常用的地方着手 , 比如在迁移文件内使用的timestamps方法 , 就是在表内生成created_at和updated_at两个datetime类型的字段 , 用于标记该记录的创建时间和更新时间 。
laravel框架继承了广泛使用稳定可靠的Carbon类库用于操作日期时间 。 为了测试方便 , 我们不需要写额外的代码 , 直接使用tinker命令行交互工具 , 在命令行输入:
tinker
进入交互界面 , 然后我们使用模型查询一条events表的数据 , 并访问其属性:
namespaceApp;$event=Event::find(1);$event->created_at
打印created_at属性输入内容如下:
=>IlluminateSupportCarbon{#819+''date'':''2020-10-0204:01:38.000000'',+''timezone_type'':3,+''timezone'':''Asia/Shanghai(+08:00)'',}
输出的是一个Carbon对象 。 也可以调用格式化方式返回需要的格式 , 比如返回时间字符串:
$event->created_at->toDateString()//''2020-10-02''
或者自定义格式:
$event->created_at->format('Y-m-dH:i')//''2020-10-0204:01''
在模型内使用该格式化方式很容易 , 添加如下属性定义:
protected$dates=['created_at','updated_at','started_at'];
那么这三个字段都会使用Carbon进行格式化 , 在访问模型对象属性时 , 就会返回该Carbon对象 。
访问器
其实上一节所说的日期时间的格式化 , 正是laravel模型访问器的功能 。 专门用于在模型层面 , 修改模型属性的展示方式 。 定义一个访问器非常简单 , 就是在模型内添加规范格式的方法函数 。 比如想要使用
$model->human_size
而数据库没有这个字段 , 模型也没有这个属性 , 那么使用访问器好了 , 添加如下定义:
publicfuncitongetHumanSizeAttribute(){}
方法内添加要处理的逻辑 , 并返回相应的值即可 。 使用->human_size属性访问 , 就相当于访问了该方法 。
下面是一个相对复杂的方法 , 根据不同情况返回字段name的值:
文章图片
如果在忽略列表 , 就使用纯小写字母 , 如果不是忽略列表的元素 , 首字母大写 。 最后组装为空格间隔的字符串返回 。
在程序内使用->name访问的时候 , 就会调用该方法 。 我们仍然使用tinker进行临时测试:
namespaceApp;$e=newEvent;$e->name=''let'slearnaLittleLaraveltogether'';$e->Save();
这里完成了模型的创建和属性赋值 , 并写入数据库 。 save方法会返回一个Events模型对象 , 直接访问其方法:
$e->name//输出''Let'sLearnaLittleLaravelTogether''
正是我们定义的访问器的修改策略 。
对于已存在的字段属性 , 创建一些常用的访问器方法能提高效率 , 比如知道用户的姓氏和名字 , 我们可以返回其全名 , 模型内创建如下方法:
classUserextendsModel{publicfunctiongetFullnameAttribute(){return$this->first_name.''''.$this->last_name;}}
声明完成时候 , 在代码内使用:
$user=User::find(12);echo$user->fullname;
虽然没有fullname属性 , 可是通过访问器我们获得了类似的能力 。 这是laravel提供的语法糖 , 很好使!
写在最后
本文通过日期时间字段的格式化方法 , 引申出laravel模型的访问器功能 , 并通过实例介绍了具体的用法 。
推荐阅读
- 脑极体|百度之星正在出圈,用十六年打造程序员版“天才请就位”
- 程序员|我国超重型火箭核心设备亮相,载重超“胖五”5倍,还用上了3D打印
- 程序员|码农新机会!2019-2020这个领域程序员缺口很大!
- 程序员|烟草局事业编朝九晚五年入20万,羡慕阿里年薪70万的程序员
- 程序员|支付宝、微信迎来劲敌!这家移动支付巨头已崛起,3年斩获3亿用户
- 程序员|年薪50万开发者相亲失败:程序员,别输在不会说话上
- 爱摄影的程序员|米家耳温计1秒给宝宝测温,测温不用等
- 裁员|程序员在深圳买下600万房子,转眼间就被裁员,失声痛哭
- 程序员|罕见!国家博物馆收藏了一行代码,出自阿里程序员之手
- 伯乐在线|程序员提高编程能力万无一失的办法