sérialisation


Séquence dans un tableau

Modèles et collections sérialisés

Sérialiser en tableau

Pour convertir le modèle et ses associations chargées en tableaux, vous pouvez utiliser la méthode toArray. Il s'agit d'une méthode récursive, donc toutes les propriétés et relations (y compris les relations associées) seront converties en tableaux : toArray 方法。这是一个递归的方法,因此所有的属性和关联(包括关联的关联)都将转化成数组:

$user = App\User::with('roles')->first();return $user->toArray();

也可以转化整个模型 集合 为数组:

$users = App\User::all();return $users->toArray();

序列化为 JSON

方法 toJson 可以把模型转化成 JSON。和方法 toArray 一样, toJson 方法也是递归的,因此所有属性和关联都会转化成 JSON, 你还可以指定由 PHP 支持的 JSON 编码选项

$user = App\User::find(1);
return $user->toJson();
return $user->toJson(JSON_PRETTY_PRINT);

也可以把模型或集合转成字符串,方法 toJson 将自动调用:

$user = App\User::find(1);
return (string) $user;

由于模型和集合在转化为字符串的时候会转成 JSON, 因此可以在应用的路由或控制器中直接返回 Eloquent 对象:

Route::get('users', function () {
    return App\User::all();
  });

隐藏 JSON 属性

有时要将模型数组或 JSON 中的某些属性进行隐藏,比如密码,则可以在模型中添加 $hidden 属性:

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model{    
    /**
     * 数组中的属性会被隐藏。
     *
     * @var array
     */  
     protected $hidden = ['password'];
   }

{note} 隐藏关联时,需使用关联的方法名。

此外,也可以使用属性 $visible 定义一个模型数组和 JSON 可见的白名单。转化后的数组或 JSON 不会出现其他的属性:

<?phpnamespace App;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model{   
     /**
     * 数组中的属性会被展示。
     *
     * @var array
     */  
     protected $visible = ['first_name', 'last_name'];
   }

临时修改可见属性

如果需要在一个模型实例中显示隐藏的属性,就可以使用 makeVisible 方法。方法 makeVisible 返回模型实例:

return $user->makeVisible('attribute')->toArray();

相应地,需要在一个模型实例中隐藏可见的属性,则可以使用 makeHidden 方法。

return $user->makeHidden('attribute')->toArray();

追加 JSON 值

有时,需要在数组或 JSON 中添加一些数据库没有字段对应的属性。 要实现这个功能,先为其定义一个访问器:

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model{    
    /**
     * 为用户获取管理员标识。
     *
     * @return bool
     */   
     public function getIsAdminAttribute()  
       {      
         return $this->attributes['admin'] == 'yes';  
       }
    }

然后,在模型属性 appends 中添加该属性名。注意,尽管访问器使用「驼峰命名法」方式定义,但是属性名通常以「蛇形命名法」方式引用。

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model{    
    /**
     * 追加到模型数组表单的访问器。
     *
     * @var array
     */   
    protected $appends = ['is_admin'];
  }

使用 append 方法追加属性后,它将包含在模型的数组和 JSON 中。 appends 数组中的属性也将遵循模型上配置的 visiblehidden 设置。

运行时追加

在单个模型实例上,使用方法 append 追加属性,或者,使用方法 setAppends

return $user->append('is_admin')->toArray();
return $user->setAppends(['is_admin'])->toArray();

Vous pouvez également convertir l'intégralité de la collection de modèles en tableau :

protected $casts = [
    'birthday' => 'date:Y-m-d',    
    'joined_at' => 'datetime:Y-m-d H:00',
  ];

Sérialisé en JSON🎜🎜La méthode toJson peut convertir le modèle en JSON. Comme la méthode toArray, la méthode toJson est récursive, donc toutes les propriétés et relations sont converties en JSON. Vous pouvez également spécifier JSON pris en charge par PHP Options d'encodage 🎜 : 🎜
<?php
    namespace App\Providers;
    use Illuminate\Support\Carbon;
    use Illuminate\Support\ServiceProvider;
    class AppServiceProvider extends ServiceProvider{   
     /**
     * 执行注册后,启动服务
     *
     * @return void
     */    
     public function boot()  
       {     
          Carbon::serializeUsing(function ($carbon) {   
                   return $carbon->format('U');       
                 });   
          }   
     /**
     * 在服务容器中注册绑定
     *
     * @return void
     */   
     public function register()  
       {      
         //   
        }
     }
🎜 Vous pouvez également convertir le modèle ou la collection en chaîne, la méthode toJson sera appelé automatiquement :🎜rrreee🎜Étant donné que les modèles et les collections sont convertis en JSON lorsqu'ils sont convertis en chaînes, les objets éloquents peuvent être renvoyés directement dans les routes ou les contrôleurs de l'application : 🎜rrreee🎜
🎜 🎜
🎜

Masquer les attributs JSON

🎜Parfois, vous souhaitez masquer certains attributs dans le tableau de modèles ou JSON, tels que les mots de passe, vous pouvez alors ajouter l'attribut $hidden au modèle : 🎜rrreee
🎜{note} Lorsque vous masquez une association, vous devez utiliser le nom de la méthode associée. 🎜
🎜De plus, vous pouvez également utiliser l'attribut $visible pour définir un tableau de modèles et une liste blanche visible en JSON. Aucun autre attribut n'apparaîtra dans le tableau converti ou JSON : 🎜rrreee
🎜

Modifier temporairement les attributs visibles

🎜Si nécessaire dans une instance de modèle Pour afficher propriétés cachées, vous pouvez utiliser la méthode makeVisible. La méthode makeVisible renvoie l'instance du modèle : 🎜rrreee🎜De même, si vous devez masquer les attributs visibles dans une instance du modèle, vous pouvez utiliser la méthode makeHidden. 🎜rrreee🎜
🎜🎜
🎜

Ajout de valeurs JSON

🎜Parfois, vous avez besoin pour ajouter des propriétés au tableau ou au JSON qui n'ont pas de champs correspondants dans la base de données. Pour implémenter cette fonction, définissez d'abord un accesseur pour celle-ci : 🎜rrreee🎜 Ensuite, ajoutez le nom de l'attribut à l'attribut du modèle appends. Notez que bien que les accesseurs soient définis à l'aide de camelCase, les noms de propriétés sont généralement référencés à l'aide de SnakeCase. 🎜rrreee🎜Après avoir ajouté une propriété à l'aide de la méthode append, elle sera incluse dans le tableau et le JSON du modèle. Les propriétés du tableau appends respecteront également les paramètres visible et hidden configurés sur le modèle. 🎜
🎜

Runtime append

🎜Sur une seule instance de modèle, utilisez la méthode append pour ajouter des attributs, ou, use Method setAppends réécrit l'intégralité du tableau des attributs ajoutés : 🎜rrreee🎜🎜🎜🎜🎜🎜

Date sérialisée

Personnalisez le format de date de n'importe quel attribut

Vous pouvez personnaliser le format de date pour l'attribut de date individuellement dans la conversion de type d'attribut d'Eloquent :

rrreee

Personnalisation globale du carbone

Laravel étend Carbon Bibliothèque de dates Cela facilite la sérialisation JSON de Carbon. Pour personnaliser la sérialisation de toutes les dates Carbon dans votre application, vous pouvez utiliser Carbon::serializeUsing 方法。方法 serializeUsing qui accepte une fermeture qui renvoie la date sous forme de chaîne.

rrreee
Cet article a été publié pour la première fois sur le site LearnKu.com.