Laravel之Eloquent ORM访问器调整器及属性转换
一.查询构建器的get方法
查询构建器的get方法返回了一个集合$users = App\User::where('active', 1)->get();
foreach ($users as $user) {echo $user->name;
}二.访问器&调整器
1.访问器:为数据库的某列在用属性读取的时候做处理
class User extends Model{/*** 获取用户的名字** @param string $value* @return string*/public function getFirstNameAttribute($value){return ucfirst($value);}
}调用
$user = App\User::find(1);
$firstName = $user->first_name;2.调整器:为数据库的某一列在更新的时候做处理
class User extends Model{/*** 设置用户的名字** @param string $value* @return string*/public function setFirstNameAttribute($value){$this->attributes['first_name'] = strtolower($value);}
}$user = App\User::find(1);
$user->first_name = 'Sally';3.日期调整器
class User extends Model{/*** 应该被调整为日期的属性** @var array*/protected $dates = ['created_at', 'updated_at', 'disabled_at'];
...
}如果字段是日期格式时,你可以将其值设置为 UNIX 时间戳,日期字符串( Y-m-d ),日期-时间字符串, Datetime/Carbon 实例,日期的值将会自动以正确格式存储到数据库中:$user = App\User::find(1);
$user->disabled_at = Carbon::now();
$user->save();正如上面提到的,当获取被罗列在$dates 数组中的属性时,它们会被自动转化为Carbon 实例,允许你在属性上使用任何Carbon 的方法:
$user = App\User::find(1);
return $user->disabled_at->getTimestamp();如果你需要自定义时间戳格式,在模型中设置$dateFormat 属性,该属性决定日期属性将以何种格式存储在数据库中、以及序列化为数组或 JSON 时的格式class Flight extends Model{/*** 模型日期的存储格式** @var string*/protected $dateFormat = 'U';
}三.属性转换1.在访问时将某列转为另一种类型:
class User extends Model{/*** 应该被转化为原生类型的属性** @var array*/protected $casts = ['is_admin' => 'boolean', //访问is_admin字段的值时,将其转为boolean值];
}2.数组转换
array 类型转换在处理被存储为序列化 JSON 的字段是特别有用,例如,如果数据库有一个 TEXT 字段类型包含了序列化 JSON,添加array 类型转换到该属性将会在 Eloquent 模型中访问其值时自动将其反序列化为 PHP数组:class User extends Model{/*** 应该被转化为原生类型的属性** @var array*/protected $casts = ['options' => 'array',];
}array 类型转换在处理被存储为序列化 JSON 的字段是特别有用,例如,如果数据库有一个 TEXT 字段类型包含
了序列化 JSON,添加array 类型转换到该属性将会在 Eloquent 模型中访问其值时自动将其反序列化为 PHP
数组:$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();五.序列化1.转化模型/集合为数组
$user = App\User::with('roles')->first();
return $user->toArray();$users = App\User::all();
return $users->toArray();2.转化模型为 JSON
$user = App\User::find(1);
return $user->toJson();3.转为字符串
$user = App\User::find(1);
return (string) $user;转换后的格式如下:
{"id":1,"user_id":1,"name":"\u6700\u65b0\u6d4b\u8bd5","created_at":"2017-05-28 18:44:37","updated_at":"2017-05-31 23:37:55"}4.隐藏属性显示
class User extends Model{/*** 在数组中隐藏的属性** @var array*/protected $hidden = ['password'];
}5.显示属性
class User extends Model{/*** 在数组中显示的属性** @var array*/protected $visible = ['first_name', 'last_name'];
}6.追加值到数组
class User extends Model{/*** 为用户获取管理员标识** @return bool*/public function getIsAdminAttribute(){return $this->attributes['admin'] == 'yes';}
}这将在原有的列上添加一列is_admin,这需要通过属性访问时才会获得,如果我们希望在获得数据的时候被一起返回,则还需要append属性
class User extends Model{protected $appends = ['is_admin'];/*** 为用户获取管理员标识** @return bool*/public function getIsAdminAttribute(){return $this->attributes['admin'] == 'yes';}
}
转载于:https://www.cnblogs.com/itfenqing/p/6930437.html
Laravel之Eloquent ORM访问器调整器及属性转换相关推荐
- 【整理】Laravel中Eloquent ORM 关联关系的操作
Laravel中Eloquent ORM 关联关系的操作 关联数据 定义关联关系 一对一 <?php class User extends Model{// 获取关联到用户的手机public f ...
- AgileEAS.NET之ORM访问器
上一篇文章AgileEAS.NET之数据关系映射ORM简单介绍了一下AgileEAS.NET平台中ORM对象的组织机构体系,但并没有对其所执行的数据存取操作介绍,在AgileEAS.NET中,我对OR ...
- Laravel之Eloquent ORM
一.ORM编程思想 1.1 Active Record 设计模式 Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射.应用Active Reco ...
- Laravel 的 Eloquent ORM学习
创建模型 首先,创建一个 Eloquent 模型,生成的模型通常放在 app 目录中,但你可以通过 composer.json 随意地将它们放在可被自动加载的地方.所有的 Eloquent 模型都继承 ...
- php orm 内存泄漏,Lavarel Eloquent ORM常驻进程下的内存溢出问题
Laravel 的 Eloquent ORM 提供了漂亮.简洁的 ActiveRecord 实现来和数据库交互.每个数据库表都有一个对应的「模型」用来与该表交互.你可以通过模型查询数据表中的数据,并将 ...
- 在ECSHOP中使用laravel框架的orm组件 简化ecshop的二次开发
在长期的 ecshop二次开发中 我慢慢喜欢上了简单的php开发模式!可能是因为我最早是做前端开发的 ,php+smarty这种简单的组合让我更喜欢!要实现什么功能 只需要写个函数在 includes ...
- [转]Laravel 4之Eloquent ORM
Laravel 4之Eloquent ORM http://dingjiannan.com/2013/laravel-eloquent/ 定义Eloquent模型 模型通常放在app/models目录 ...
- Laravel学习记录--访问器与修改器
简介 当你在Eloquent模型实例中获取或设置某些属性值的时候,访问器和修改器允许你对Eloquent属性值进行格式化,访问器可在将要读取的数据进行处理后在返回给调用方,而修改器可在数据要被保存到数 ...
- Laravel 5.1 文档攻略——Laravel Eloquent ORM最强大也是最难理解的部分:数据关系...
简介 其实大家都知道,数据表之间都是可以关联的,Eloquent ORM是数据模型操作代替表操作,那么表的关联查询,在Eloquent这里也就是模型间的关联查询,这就是本章的主要内容: Eloquen ...
最新文章
- s-sar命令(System Activity Reporter系统活动情况报告)
- hdu 5037 Frog 贪心 dp
- Java操作ftp,上传,下载,删除操作
- 生产环境使用HBase,你必须知道的最佳实践
- es创建索引库报错 :Types cannot be provided in put mapping requests, unless the include_type_na
- 蓝桥杯 ADV-167算法提高 快乐司机(贪心算法)
- 济宁与华为企业云战略合作携手推进云计算产业发展
- 兔子进洞算法_下兔子洞:一个varnishreload错误的故事-第1部分
- win7系统修复工具_Windows Repair Pro v4.4.60 系统修复工具
- 【数据可视化】AntV L7实现地图可视化,DrillDownLayer钻取异步获取数据,悬浮预警框
- 【Deblurring by Realistic Blurring】阅读笔记
- Linux常用的设置文件安全上下文命令使用方法
- node.js解析微信消息推送xml格式加密的消息
- 【时间序列分析】差分运算及延迟算子的性质
- Vuzix的M100安卓智能眼镜和Google Glass不同
- 皮尔森相关性的相似度
- 数据治理系统解决方案浅析
- sqlite 表的列增加,修改,删除及表的重构和去重操作
- layui导出全部和下载模板
- 在服务器上建虚拟主机再建网站,在服务器上建虚拟主机再建网站
热门文章
- JetBrains打造的开发神器,一套代码适应多端!
- Gson:我爸是 Google
- 一份 Spring Boot 项目搭建模板
- Windows 给力!可以扔掉 Linux 虚拟机了!
- 哥们,你真以为你会做这道JVM面试题?
- 斯坦福AI 5小时DNA测序破世界纪录!创人类新里程碑,成本仅3万
- 现实版“神笔马良”!“90后”小伙把贫困村画成网红景点,网友:一个人带动整个村GDP...
- 北京大学,签约这个省份!
- 吴恩达教你如何读论文:绘制进度表格,论文至少看三遍,还要问自己问题
- 如何用数学追到完美情人?