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 parse_url 一个好用的函数
Oct 03 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
php通过array_merge()函数合并两个数组的方法
Mar 18 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
简单实现php上传文件功能
Sep 21 PHP
php实现微信原生支付(扫码支付)功能
May 30 PHP
在Laravel 中实现是否关注的示例
Oct 22 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生成HTML静态页面实例代码
2008/08/31 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
深入分析PHP设计模式
2020/06/15 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
python pygame实现方向键控制小球
2019/05/17 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
Unix/Linux开发面试题
2016/08/16 面试题
自考毕业自我鉴定
2014/03/18 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
远程培训的心得体会
2014/09/01 职场文书
二年级数学教学反思
2016/02/16 职场文书
python process模块的使用简介
2021/05/14 Python
nginx请求限制配置方法
2021/07/09 Servers
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers