在写api的时候,数据一般是以json格式进行传输的,没有对象可以直接使用。这个时候,对数据的序列化转换就很重要,Eloquent提供了很方便的方法和约定,不仅可以转换,还可以控制里面的键值。

基本用法

将模型转化为数组

  1. $user = App\User::with('roles')->first();
  2. return $user->toArray();

把一个模型转化成数组;

  1. $users = App\User::all();
  2. return $users->toArray();

把collection转化为数组;

将模型转化为Json

  1. $user = App\User::find(1);
  2. return $user->toJson();

这个是手动函数;

如果你直接返回一个模型或collection,那么系统会自动把它cast成json:

  1. Route::get('users', function () {
  2. return App\User::all();
  3. });

这个你可以用路由测试一下结果;

隐藏Json中的一些属性

像password这种字段,其实是不希望在json中出现给别人看到的,那么可以把它隐藏

  1. namespace App;
  2. use Illuminate\Database\Eloquent\Model;
  3. class User extends Model
  4. {
  5. protected $hidden = ['password'];
  6. }

这样写是黑名单;

  1. namespace App;
  2. use Illuminate\Database\Eloquent\Model;
  3. class User extends Model
  4. {
  5. protected $visible = ['first_name', 'last_name'];
  6. }

这样写是白名单;

文档用红字写到:

  1. Note: When hiding relationships, use the relationship's method name, not its dynamic property name.

意思是说,由于有些表是关联查询出来的,你可以隐藏这些表,但是填上面过滤字段的时候,不要填关联表里的字段,而是填模型表间关系的方法,这样就可以把整个表隐藏掉,如果你要隐藏关联表里的部分字段,那么到关联表里去隐藏。(本来想写个例子,老婆叫我去吃早饭了,就先不写了。)

增加Json中的一些属性

刚才说了去掉属性,显然有时候你也需要手动增加一些属性:

第一步,增加一个Accessor:

  1. namespace App;
  2. use Illuminate\Database\Eloquent\Model;
  3. class User extends Model
  4. {
  5. public function getIsAdminAttribute()
  6. {
  7. //return $this->attributes['admin'] == 'yes';
  8. //官网是这样写的,何必增加理解难度,让人混淆呢,真是的;
  9. //我简写成这样了
  10. return 'yes';
  11. }
  12. }

第二步,把增加的字段添加到$appends这个数组里:

  1. namespace App;
  2. use Illuminate\Database\Eloquent\Model;
  3. class User extends Model
  4. {
  5. public function getIsAdminAttribute()
  6. {
  7. //return $this->attributes['admin'] == 'yes';
  8. //官网是这样写的,何必增加理解难度,让人混淆呢,真是的;
  9. //我简写成这样了
  10. return 'yes';
  11. }
  12. protected $appends = ['is_admin'];
  13. }

好,json里就多了一个is_admin: "yes"

Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化的更多相关文章

  1. Laravel 5.1 文档攻略 —— Eloquent:模型关系

    简介 其实大家都知道,数据表之间都是可以关联的,前面讲过了,Eloquent ORM是数据模型操作代替表操作,那么表的关联查询,在Eloquent这里也就是模型间的关联查询,这就是本章的主要内容: E ...

  2. Laravel 5.1 文档攻略 —— Eloquent: 读取器和修饰器

    date_range 8月前 tag_faces Woody remove_red_eye 1483 chat0 简介 这一章其实很简单,Model的属性不是和数据表的字段一一对应吗? 那么在存储和呈 ...

  3. Laravel 5.1 文档攻略 —— Eloquent Collection

    简介 像all()和get(),还有一些处理模型关系这种会返回多条数据的方法,在Eloquent里面会返回一个collection对象集合(对象装在对象里),而不是像DQB的数组结果集合(对象装在数组 ...

  4. [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件

    [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件 http://laravelacademy.org/post/7812.html 简介 中间件为过滤进入应用的 ...

  5. 在DHTML中把整个文档的各个元素作为对象处理的技术是:()

    在DHTML中把整个文档的各个元素作为对象处理的技术是:() A.HTML B.CSS C.DOM D.Script(脚本语言) 解答:C DOM:文档对象模型

  6. [ Laravel 5.5 文档 ] 快速入门 —— 目录结构篇

    简介 Laravel 默认的目录结构试图为不管是大型应用还是小型应用提供一个良好的起点.当然,你也可以按照自己的喜好重新组织应用的目录结构,因为 Laravel 对于指定类在何处被加载没有任何限制 — ...

  7. Laravel 5.5 文档 ] 快速入门 —— 安装配置篇

    服务器要求 Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有 ...

  8. [ Laravel 5.5 文档 ] 底层原理 —— 一次 Laravel 请求的生命周期

     Posted on 2018年3月5日 by  学院君 简介 当我们使用现实世界中的任何工具时,如果理解了该工具的工作原理,那么用起来就会得心应手,应用开发也是如此.当你理解了开发工具如何工作,用起 ...

  9. [ Laravel 5.5 文档 ] 官方扩展包 —— 全文搜索解决方案:Laravel Scout

    简介 Laravel Scout 为 Eloquent 模型全文搜索实现提供了简单的.基于驱动的解决方案.通过使用模型观察者,Scout 会自动同步更新模型记录的索引. 目前,Scout 通过 Alg ...

随机推荐

  1. linq 之 Distinct的使用

    public class Product { public string Name { get;set;} public int Code { get; set; } } class ProductC ...

  2. host,nslookup,dig 命令安装

    host,nslookup,dig依赖bind包,所以先看一下系统有没有bind包 命令如下:rpm -qa |grep bind 如果没有或者版本太低请升级安装 命令是:yum install bi ...

  3. 最大似然估计 (MLE) 最大后验概率(MAP)

    1) 最大似然估计 MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即"模型已定,参数未知". 例如,我们知道这个分布是正态分布 ...

  4. Python + OpenCV2 系列:3 - python 字符串,类,编码规范

    首先,强烈推荐<<简明 Python 教程>> Swaroop, C. H. 著 沈洁元 译 其实,这本书里已经把python的最基本的用法,编码等等介绍的很好,这里把我用到的 ...

  5. Unity Particle System Sorting Order

    http://answers.unity3d.com/questions/577288/particle-system-rendering-behind-sprites.html

  6. JPG / TGA

    JPG http://www.openjpeg.org http://libjpeg.sourceforge.net TGA http://tgalib.sourceforge.net

  7. Spot光照资料

    http://forums.autodesk.com/t5/FBX-SDK/EmissiveFactor-AmbientFactor-DiffuseFactor/td-p/4230572http:// ...

  8. IOS: 账号,证书 好文整理

    公钥.私钥.数字证书的概念 http://blog.csdn.net/turui/article/details/2048582 iOS Provisioning Profile(Certificat ...

  9. getAttribute和getParameter的区别

    2016年1月19日JSP中getParameter与getAttribute有何区别? ——getParameter得到的都是String类型的.或者是http://a.jsp?id=123中的12 ...

  10. 通过LVS+Keepalived搭建高可用的负载均衡集群系统

    1. 安装LVS软件      (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...