laravel 之 Eloquent 模型修改器和序列化示例


Posted in PHP onOctober 17, 2019

修改器

获取

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
 public function getFirstNameAttribute($value) {
  return ucfirst($value);
 }
}

使用 Laravel 加密器 来加密一个被保存在数据库中的值,当你从 Eloquent 模型访问该属性时该值将被自动解密。

$user = App\User::find(1);
$firstName = $user->first_name;

修改

public function setFirstNameAttribute ($value) {
 $this->attributes['first_name'] = strtolower($value);
}
$user = App\User::find(1);
$user->first_name = 'Sally';

日期转化器

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
 protected $dates = [
  'created_at',
  'updated_at',
  'deleted_at'
 ];
}
$user = App\User::find(1);
$user->deleted_at = Carbon::now();
$user->save();

可在属性上使用任何 Carbon 方法:

$user = App\User::find(1);
echo $user->deleted_at->getTimestamp();

设置时间格式

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model {
 protected $dateFormat = 'U';
}

属性类型转化

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
 protected $casts = [
  'is_admin' => 'boolean',
 ];
}

现在当你访问 is_admin 属性时,它将会被转换成布尔值,即便保存在数据库里的值是一个整数:

$user = App\User::find(1);
if ($user->is_admin) {
 //
}

支持的转换的类型有:

integer
real
float
double
string
boolean
object
array
collection
date
datetime
timestamp

# protected $casts = [
#  'options' => 'array',
# ];

$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();

序列化模型或集合

序列化成数组

$user = App\User::with('roles')->first();
return $user->toArray();

序列化成 JSON

$user = App\User::find(1);
return $user->toJson();
// 或者
return (string) $user; // 自动调用 toJson
// 或者
return App\User::all();

隐藏来自 json 的属性

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
 protected $hidden = ['password'];
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
 protected $visible = ['first_name', 'last_name'];
}

临时隐藏

return $user->makeVisible('attribute')->toArray();
return $user->makeHidden('attribute')->toArray();

添加参数到 json 中

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
 protected $appends = ['is_admin'];
}
# 在 appends 数组中的属性也遵循模型中 visible 和 hidden 设置
public function getIsAdminAttribute() {
 return $this->attributes['is_admin'] == 'yes';
}

以上这篇laravel 之 Eloquent 模型修改器和序列化示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
十天学会php之第二天
Oct 09 PHP
PHP学习笔记之一
Jan 17 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
php实现随机显示图片方法汇总
May 21 PHP
php实现倒计时效果
Dec 19 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
php unlink()函数使用教程
Jul 12 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 #PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 #PHP
解决laravel查询构造器中的别名问题
Oct 17 #PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 #PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 #PHP
解决laravel5.4下的group by报错的问题
Oct 16 #PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 #PHP
You might like
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
关于this和self的使用说明
2010/08/01 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
详解Python中heapq模块的用法
2016/06/28 Python
python flask中静态文件的管理方法
2018/03/20 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
QML使用Python的函数过程解析
2019/09/26 Python
基于python plotly交互式图表大全
2019/12/07 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
jupyter notebook实现显示行号
2020/04/13 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
英文自荐信格式
2013/11/28 职场文书
会务接待方案
2014/02/27 职场文书
大学生求职意向书
2015/05/11 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript