zoukankan      html  css  js  c++  java
  • Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化

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

    基本用法

    将模型转化为数组

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

    把一个模型转化成数组;

    1. $users = AppUser::all();
    2. return $users->toArray();

    把collection转化为数组;

    将模型转化为Json

    1. $user = AppUser::find(1);
    2. return $user->toJson();

    这个是手动函数;

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

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

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

    隐藏Json中的一些属性

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

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

    这样写是黑名单;

    1. namespace App;
    2. use IlluminateDatabaseEloquentModel;
    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 IlluminateDatabaseEloquentModel;
    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 IlluminateDatabaseEloquentModel;
    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"

  • 相关阅读:
    关于OPENSSL的EVP函数的使用
    在docker下面安装Nginx PHP mysql let's encrypt
    【转】如何统计网站(如个人博客)访问量
    CoolEdit对比两段音频文件:将两段音频文件放在左右声道
    matlab常用的清空和关闭命令(清空变量区、清空命令行、清空图像等)
    TMS320F28335利用ePWM改变ADC采样频率(双通道)示例代码
    Matlab中rand、randn、randi、rands的区别以及用randn生成白噪声的示例
    Matlab中find()寻找函数的常见用法
    【转】 博客园自定义样式修改网页icon图标
    UltraEdit 高亮文档中同名变量
  • 原文地址:https://www.cnblogs.com/isykw/p/6151983.html
Copyright © 2011-2022 走看看