Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化
在写api的时候,数据一般是以json格式进行传输的,没有对象可以直接使用。这个时候,对数据的序列化转换就很重要,Eloquent提供了很方便的方法和约定,不仅可以转换,还可以控制里面的键值。
基本用法
将模型转化为数组
$user = App\User::with('roles')->first();return $user->toArray();
把一个模型转化成数组;
$users = App\User::all();return $users->toArray();
把collection转化为数组;
将模型转化为Json
$user = App\User::find(1);return $user->toJson();
这个是手动函数;
如果你直接返回一个模型或collection,那么系统会自动把它cast成json:
Route::get('users', function () {return App\User::all();});
这个你可以用路由测试一下结果;
隐藏Json中的一些属性
像password这种字段,其实是不希望在json中出现给别人看到的,那么可以把它隐藏
namespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{protected $hidden = ['password'];}
这样写是黑名单;
namespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{protected $visible = ['first_name', 'last_name'];}
这样写是白名单;
文档用红字写到:
Note: When hiding relationships, use the relationship's method name, not its dynamic property name.
意思是说,由于有些表是关联查询出来的,你可以隐藏这些表,但是填上面过滤字段的时候,不要填关联表里的字段,而是填模型表间关系的方法,这样就可以把整个表隐藏掉,如果你要隐藏关联表里的部分字段,那么到关联表里去隐藏。(本来想写个例子,老婆叫我去吃早饭了,就先不写了。)
增加Json中的一些属性
刚才说了去掉属性,显然有时候你也需要手动增加一些属性:
第一步,增加一个Accessor:
namespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{public function getIsAdminAttribute(){//return $this->attributes['admin'] == 'yes';//官网是这样写的,何必增加理解难度,让人混淆呢,真是的;//我简写成这样了return 'yes';}}
第二步,把增加的字段添加到$appends这个数组里:
namespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{public function getIsAdminAttribute(){//return $this->attributes['admin'] == 'yes';//官网是这样写的,何必增加理解难度,让人混淆呢,真是的;//我简写成这样了return 'yes';}protected $appends = ['is_admin'];}
好,json里就多了一个is_admin: "yes"
Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化的更多相关文章
- Laravel 5.1 文档攻略 —— Eloquent:模型关系
简介 其实大家都知道,数据表之间都是可以关联的,前面讲过了,Eloquent ORM是数据模型操作代替表操作,那么表的关联查询,在Eloquent这里也就是模型间的关联查询,这就是本章的主要内容: E ...
- Laravel 5.1 文档攻略 —— Eloquent: 读取器和修饰器
date_range 8月前 tag_faces Woody remove_red_eye 1483 chat0 简介 这一章其实很简单,Model的属性不是和数据表的字段一一对应吗? 那么在存储和呈 ...
- Laravel 5.1 文档攻略 —— Eloquent Collection
简介 像all()和get(),还有一些处理模型关系这种会返回多条数据的方法,在Eloquent里面会返回一个collection对象集合(对象装在对象里),而不是像DQB的数组结果集合(对象装在数组 ...
- [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件
[ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件 http://laravelacademy.org/post/7812.html 简介 中间件为过滤进入应用的 ...
- 在DHTML中把整个文档的各个元素作为对象处理的技术是:()
在DHTML中把整个文档的各个元素作为对象处理的技术是:() A.HTML B.CSS C.DOM D.Script(脚本语言) 解答:C DOM:文档对象模型
- [ Laravel 5.5 文档 ] 快速入门 —— 目录结构篇
简介 Laravel 默认的目录结构试图为不管是大型应用还是小型应用提供一个良好的起点.当然,你也可以按照自己的喜好重新组织应用的目录结构,因为 Laravel 对于指定类在何处被加载没有任何限制 — ...
- Laravel 5.5 文档 ] 快速入门 —— 安装配置篇
服务器要求 Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有 ...
- [ Laravel 5.5 文档 ] 底层原理 —— 一次 Laravel 请求的生命周期
Posted on 2018年3月5日 by 学院君 简介 当我们使用现实世界中的任何工具时,如果理解了该工具的工作原理,那么用起来就会得心应手,应用开发也是如此.当你理解了开发工具如何工作,用起 ...
- [ Laravel 5.5 文档 ] 官方扩展包 —— 全文搜索解决方案:Laravel Scout
简介 Laravel Scout 为 Eloquent 模型全文搜索实现提供了简单的.基于驱动的解决方案.通过使用模型观察者,Scout 会自动同步更新模型记录的索引. 目前,Scout 通过 Alg ...
随机推荐
- jquery 中的 return false 不起作用
jquery 中的 return false 不起作用 $(".lcId").each(function(e) { if ($(this).attr("checked& ...
- SQL日期格式转换
CONVERT(nvarchar(20), [Date],101) as 'Date' 10/20/2016 CONVERT(nvarchar(20), [Date],102) as 'Date ...
- Marshal
https://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx http://tomosoft.jp/design/?p=4647 ht ...
- ios 消息转发初探
有时候服务器的接口文档上一个数据写的是string类型,这时候你就会直接把它赋值给一个label. 问题来了,有时候这个string的确是string,没有问题,有时候又是NSNumber,当然不管三 ...
- 使用wp_editor函数实现可视化编辑器
在最近的wp项目中遇到了需要使用可视化编辑器来接收用户的输入,正好就研究了一下wp_editor这个函数的用法,利用这个函数能很方便的把textarea文本域变成可视化编辑器. Wp_editor函数 ...
- Django笔记-登陆、注册(利用cookie实现)
1.项目结构: 2.关键代码: settings.py INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'djang ...
- OC-Q&A
How to declare a string in Objective-C ? A C string is just like in C. char myCString[] = "test ...
- ElasticSearch已经配置好ik分词和mmseg分词(转)
ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进行数据索引 ...
- 父容器的flowover:hidden 必须配合父容器的宽高height width才能生效
有时候 给父容器 加上了 flowover:hidden 这个css后, 其中的子元素为什么仍然会跑出来? 解决的根本方法就是要给 父容器 加上具体的一个宽度, 或高度. (而这个宽度和高度, 其实你 ...
- 修改PUTTY支持保存密码
1.从官网下载 Putty 0.60 Release 的 Windows 版源码 http://www.chiark.greenend.org.uk/~sgtatham/putty/download. ...