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 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
php使用文本统计访问量的方法
May 12 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
asp函数split()对应php函数explode()
Feb 27 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中实现进程间通讯
2006/10/09 PHP
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
php删除指定目录的方法
2015/04/03 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
javascript操作数组详解
2014/12/17 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
python django中8000端口被占用的解决
2019/12/17 Python
python实现图像全景拼接
2020/03/27 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
医院总经理职责
2013/12/26 职场文书
便利店投资创业计划书
2014/02/08 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
出生证明范本
2015/06/15 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
八年级英语教学反思
2016/02/15 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
详解MindSpore自定义模型损失函数
2021/06/30 Python
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python