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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
谈谈PHP语法(4)
Oct 09 PHP
用PHP来写记数器(详细介绍)
Oct 09 PHP
一个连接两个不同MYSQL数据库的PHP程序
Oct 09 PHP
模仿OSO的论坛(四)
Oct 09 PHP
php 定界符格式引起的错误
May 24 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 PHP
yii2多图上传组件的使用教程
May 10 PHP
php5.6.x到php7.0.x特性小结
Aug 17 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
利用“多说”制作留言板、评论系统
2015/07/14 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
2009/08/04 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
讲解Python中的递归函数
2015/04/27 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
django 外键model的互相读取方法
2018/12/15 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
python实现批量修改文件名
2020/03/23 Python
python的dict判断key是否存在的方法
2020/12/09 Python
应届生服装设计自我评价
2013/09/20 职场文书
专业毕业生个性的自我评价
2013/10/03 职场文书
秋季运动会稿件
2014/01/30 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
项目建议书范文
2014/05/12 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
质量保证书格式
2015/02/27 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技