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 ...
随机推荐
- css011 表格和表单的格式化
css011 表格和表单的格式化 一. 让表格专司其职 Html中创建一个三行三列的表格 <table> <caption align="bottom" ...
- MFC学习-第一课 MFC运行机制
最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...
- SSH原理与运用(一):远程登录
SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于 ...
- 自然语言14_Stemming words with NLTK
https://www.pythonprogramming.net/stemming-nltk-tutorial/?completed=/stop-words-nltk-tutorial/ # -*- ...
- Runner站立会议03
开会时间:21.10~21.30 地点:二教103 今天做了什么:Android的存储,只是存储在/date/date 文件夹下和sd卡 明天准备做什么:学习Android的数据库的使用sqlite ...
- Java——文件选择框:JFileChooser
import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import j ...
- Mysql 与 Python socket
py1.py # -*- coding: utf-8 -*- import sqlalchemy import tushare import pandas import socket import s ...
- javascript 小技巧
1:Boolean()==!! console.log(Boolean(888));//true console.log(!!(888));//true console.log(Boolean(&qu ...
- Python之路【第六篇】:面向对象编程相关
判断类与对象关系 isinstance(obj, cls) 判断对象obj是否是由cls类创建的 #!/usr/bin/env python #-*- coding:utf-8 -*- class ...
- js中自定义事件,使用了jQuery
$(function(){ $('#btn').bind("myClick", function(){ //自定义myClick事件 $('#test').append(" ...