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"

  • 相关阅读:
    js 技巧 (八)JS代码判断集锦(之二)
    js 技巧 (七)JS代码判断集锦(之一)
    js 技巧 (六)弹窗代码汇总
    js 技巧 (六)JavaScript[对象.属性]集锦
    js 技巧 (五)
    js 技巧 (四)
    1.7.7释放锁的不良后果
    1.7.6方法stop()与java.lang.threadDeath异常
    1.7.5能停止的线程-暴力停止
    1.7.4在沉睡中停止
  • 原文地址:https://www.cnblogs.com/isykw/p/6151983.html
Copyright © 2011-2022 走看看