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.

  • 相关阅读:
    centos7.9安装Oracle 19c数据库(rpm方式)
    tomcat配置404/500自定义错误页面
    centos7.7部署多个tomcat服务器
    Linux配置Tomcat实现双向SSL认证(使用keytool工具生成证书)
    C#方法的多值返回方式
    Unity 判断2D/3D坐标系下的一个点是否在指定的摄像机视野范围内
    Unity项目的APK在雷电模拟器上弹出 "XXX停止运行"或者“XXX屡次停止运行”
    Python调用Unity工程下CSharp代码中的静态方法
    C#如何屏蔽程序的多次启动
    Something about My Blog
  • 原文地址:https://www.cnblogs.com/grkin/p/4623746.html
Copyright © 2011-2022 走看看