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一些服务器端特性的配置加强php的安全
Oct 09 PHP
php include加载文件两种方式效率比较
Aug 08 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
有关PHP性能优化的介绍
Jun 20 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
php远程下载类分享
Apr 13 PHP
php简单的上传类分享
May 15 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
PHP的简单跳转提示的实现详解
Mar 14 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
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
Python设计实现的计算器功能完整实例
2017/08/18 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
电子商务网站的创业计划书
2014/01/05 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
2014年端午节活动方案
2014/03/11 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
学校运动会报道稿
2014/09/23 职场文书
教育合作协议范本
2014/10/17 职场文书
丽江古城导游词
2015/02/03 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python