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 相关文章推荐
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
require(),include(),require_once()和include_once()区别
Mar 27 PHP
php 面向对象的一个例子
Apr 12 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
PHP的命令行命令使用指南
Aug 18 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 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视频拍照上传头像功能实现代码分享
2015/10/08 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
Python中单例模式总结
2018/02/20 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
String和StringBuffer的区别
2015/08/13 面试题
SQL面试题
2013/04/30 面试题
机电专业毕业生推荐信
2013/11/10 职场文书
终端业务员岗位职责
2013/11/27 职场文书
建筑公司文秘岗位职责
2013/11/29 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
担保书格式及范文
2014/04/01 职场文书
委托书模板
2014/04/04 职场文书
师范生求职自荐信
2014/06/14 职场文书
员工生日会策划方案
2014/06/14 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
MySQL中连接查询和子查询的问题
2021/09/04 MySQL