zoukankan      html  css  js  c++  java
  • Laravel5.1学习笔记23 Eloquent 序列化

    Eloquent: Serialization

    Introduction

    When building JSON APIs, you will often need to convert your models and relationships to arrays or JSON. Eloquent includes convenient methods for making these conversions, as well as controlling which attributes are included in your serializations.

    Basic Usage

    Converting A Model To An Array

    To convert a model and its loaded relationships to an array, you may use the toArraymethod. This method is recursive, so all attributes and all relations (including the relations of relations) will be converted to arrays:

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

    You may also convert collections to arrays:

    $users = AppUser::all();
    
    return $users->toArray();
    
    Converting A Model To JSON

    To convert a model to JSON, you may use the toJson method. Like toArray, the toJsonmethod is recursive, so all attributes and relations will be converted to JSON:

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

    Alternatively, you may cast a model or collection to a string, which will automatically call the toJson method:

    $user = AppUser::find(1);
    
    return (string) $user;
    

    Since models and collections are converted to JSON when cast to a string, you can return Eloquent objects directly from your application's routes or controllers:

    Route::get('users', function () {
        return AppUser::all();
    });
    

    Hiding Attributes From JSON

    Sometimes you may wish to limit the attributes, such as passwords, that are included in your model's array or JSON representation. To do so, add a $hidden property definition to your model:

    <?php
    
    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class User extends Model
    {
        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = ['password'];
    }
    

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

    Alternatively, you may use the visible property to define a white-list of attributes that should be included in your model's array and JSON representation:

    <?php
    
    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class User extends Model
    {
        /**
         * The attributes that should be visible in arrays.
         *
         * @var array
         */
        protected $visible = ['first_name', 'last_name'];
    }
    

    Appending Values To JSON

    Occasionally, you may need to add array attributes that do not have a corresponding column in your database. To do so, first define an accessor for the value:

    <?php
    
    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class User extends Model
    {
        /**
         * Get the administrator flag for the user.
         *
         * @return bool
         */
        public function getIsAdminAttribute()
        {
            return $this->attributes['admin'] == 'yes';
        }
    }
    

    Once you have created the accessor, add the attribute name to the appends property on the model:

    <?php
    
    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class User extends Model
    {
        /**
         * The accessors to append to the model's array form.
         *
         * @var array
         */
        protected $appends = ['is_admin'];
    }
    

    Once the attribute has been added to the appends list, it will be included in both the model's array and JSON forms. Attributes in the appends array will also respect thevisible and hidden settings configured on the model.

  • 相关阅读:
    登录及注册页面
    多方式登录
    git笔记
    后台主页模块设计
    auth模块迁移后需新增字段
    使用idea构建SpringBoot源码
    Springboot相关面试问题
    Springboot自动加载工具-devtools的理解与使用
    SpringBoot项目的一些简单常用配置
    Java线程池及Executor框架的理解
  • 原文地址:https://www.cnblogs.com/grkin/p/4623746.html
Copyright © 2011-2022 走看看