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生成WAP页面
Oct 09 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
php的一些小问题
Jul 03 PHP
windows下开发并编译PHP扩展的方法
Mar 18 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
CI(CodeIgniter)框架视图中加载视图的方法
Mar 24 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
javascript与webservice的通信实现代码
2010/12/25 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
python实现在windows下操作word的方法
2015/04/28 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
python实现ping命令小程序
2020/12/28 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
什么是makefile? 如何编写makefile?
2013/01/02 面试题
职业教育毕业生求职信
2013/11/09 职场文书
信息技术课教学反思
2016/02/23 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android