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 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
11个PHP 分页脚本推荐
Aug 15 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
php实现快速排序法函数代码
Aug 27 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
php分页函数完整实例代码
Sep 22 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
PHP设计模式之工厂模式详解
Oct 24 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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 实例化类的一点摘记
2008/03/23 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
Python使用Scrapy爬取妹子图
2015/05/28 Python
关于Django外键赋值问题详解
2017/08/13 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
python实现键盘输入的实操方法
2019/07/16 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
二手书店创业计划书
2014/01/16 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
李开复演讲稿
2014/05/24 职场文书
空气环保标语
2014/06/12 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
爱的教育读书笔记
2015/06/26 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
解析原生JS getComputedStyle
2021/05/25 Javascript
python中使用redis用法详解
2022/12/24 Redis