Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化

在写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"

时间: 2024-08-14 12:05:26

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

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

[ Laravel 5.5 文档 ] 处理用户请求 -- HTTP 请求的过滤器:中间件 http://laravelacademy.org/post/7812.html 简介 中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制.例如,Laravel 内置了一个中间件来验证用户是否经过认证(如登录),如果用户没有经过认证,中间件会将用户重定向到登录页面,而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作. 当然,除了认证之外,中间件还可以被用来处理很多其它任务.比如:COR

Laravel生成Word文档 - phpword

在项目实际开发或学习中,会遇到把数据导出生成word文档的需求.这里就用优雅.流行的laravel框架,来简单的教大家实现. phpword,它可以很方便的实现word文档的生成,同时可以在word中添加表格.目录.图片.超链接.页眉.页脚等功能强大. 安装phpWord 要求 强制性: PHP 5.3.3+ XML解析器扩展 Zend \ Escaper组件 Zend \ Stdlib组件 Zend \ Validator组件 可选的: -邮编扩展 - GD扩展 - XMLWriter扩展 -

【VR】Leap Motion 官网文档 HandModel(手部模型)

前言: 本系列译文是为迎合Unity VR的热潮与大家的学习需要,推出的针对Unity方向的Leap Motion官方文档中英对照翻译. 本篇为第六篇 <HandModel(手部模型)> ,该类主要用于连接控制器和手部模型,以及处理手臂.肘部.手掌.手指的位置和角度等信息. Handmodel is the base class for all the other hand scripts. If you are creating your own hands and need a custo

HTML文档模式与盒模型

HTML文档根据文档顶部的doctype声明来决定渲染模式,有标准模式(Standards Mode)与怪异模式(Quirks mode,或叫做混杂模式)两种模式. IE5及以前默认总是表现为怪异模式,IE6~IE8遇到非正常声明或特定声明时也会进入怪异模式. 否则,如果有正确声明doctype并在顶端,则默认进入标准模式,即包括HTML5声明在IE6~IE8,也会进入标准模式,而非一定需要HTML4长长的声明. 而许多现代浏览器即使是怪异模式,表现也和标准模式是一致的. IE6+进入怪异模式的

【VR】Leap Motion 官网文档 FingerModel (手指模型)

前言: 感谢关注和支持这个Leap Motion系列翻译的朋友们,很抱歉由于工作原因很久没有更新,今后这个翻译还会继续(除非官方直接给出中文文档).本篇献给大家的是 <FingerModel (手指模型)> ,该类主要用于手指模型的创建.更新.信息获取及控制等. FingerModel?  手指模型类 FingerModel is the base class for all the other finger scripts. If you are creating your own fing

【VR】Leap Motion 官网文档 ToolModel (工具模型)

前言 非常开心的是,Leap Motion官方文档的翻译工作有了新的伙伴加入,特此转发过来. 原译文链接:http://blog.csdn.net/qq_18408937/article/details/47373879 ToolModel  工具模型 ToolModel updates a model's position and orientation based on a tracked tool. Compared to hands, tools are very simple and

[ Laravel 5.1 文档 ] 服务 —— 任务调度

1.简介 在以前,开发者需要为每一个需要调度的任务编写一个Cron条目,这是很让人头疼的事.你的任务调度不在源码控制中,你必须使用SSH登录到服务器然后添加这些Cron条目.Laravel命令调度器允许你平滑而又富有表现力地在Laravel中定义命令调度,并且服务器上只需要一个Cron条目即可. 任务调度定义在app/Console/Kernel.php文件的schedule方法中,该方法中已经包含了一个示例.你可以自由地添加你需要的调度任务到Schedule对象. 1.1 开启调度 下面是你唯

[ Laravel 5.1 文档 ] 架构 —— 应用目录结构

1.简介 Laravel应用默认的目录结构试图为不管是大型应用还是小型应用提供一个好的起点,当然,你可以自己按照喜好重新组织应用目录结构,Laravel对类在何处被加载没有任何限制——只要Composer可以自动载入它们即可. 2.根目录 新安装的Laravel应用包含许多文件夹: app目录包含了应用的核心代码: bootstrap目录包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能: config目录包含了应用所有的配置文件: data

[ Laravel 5.6 文档 ] 进阶系列 —— 任务调度

简介 Cron 是 UNIX.SOLARIS.LINUX 下的一个十分有用的工具,通过 Cron 脚本能使计划任务定期地在系统后台自动运行.这种计划任务在 UNIX.SOLARIS.LINUX下术语为 Cron Jobs.Crontab 则是用来记录在特定时间运行的 Cron 的一个脚本文件,Crontab 文件的每一行均遵守特定的格式: ? 我们可以在服务器上通过 crontab -e 来新增或编辑 Cron 条目,通过 crontab -l 查看已存在的 Cron 条目.更多关于 Cron