sérialisation
Séquence dans un tableau
- sérialisée en JSON
- Introduction
- Build J Lors de l'utilisation de SON API, il est souvent nécessaire de convertir des modèles et des associations en Array ou JSON. Pour ces opérations, Eloquent fournit des méthodes pratiques et un contrôle des propriétés lors de la sérialisation.
Pour convertir le modèle et ses associations chargées en tableaux, vous pouvez utiliser la méthode 也可以转化整个模型 集合 为数组: 方法 也可以把模型或集合转成字符串,方法 由于模型和集合在转化为字符串的时候会转成 JSON, 因此可以在应用的路由或控制器中直接返回 Eloquent 对象: 有时要将模型数组或 JSON 中的某些属性进行隐藏,比如密码,则可以在模型中添加 {note} 隐藏关联时,需使用关联的方法名。 此外,也可以使用属性 如果需要在一个模型实例中显示隐藏的属性,就可以使用 相应地,需要在一个模型实例中隐藏可见的属性,则可以使用 有时,需要在数组或 JSON 中添加一些数据库没有字段对应的属性。 要实现这个功能,先为其定义一个访问器: 然后,在模型属性 使用 在单个模型实例上,使用方法 Sérialiser en tableau
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;
Route::get('users', function () {
return App\User::all();
});
隐藏 JSON 属性
$hidden
属性:<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 数组中的属性会被隐藏。
*
* @var array
*/
protected $hidden = ['password'];
}
$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 值
<?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
数组中的属性也将遵循模型上配置的 visible
和 hidden
设置。运行时追加
append
追加属性,或者,使用方法 setAppends
return $user->append('is_admin')->toArray();
return $user->setAppends(['is_admin'])->toArray();
protected $casts = [ 'birthday' => 'date:Y-m-d', 'joined_at' => 'datetime:Y-m-d H:00', ];
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 : 🎜rrreeeModifier 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éthodemakeVisible
. 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èleappends
. 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éthodeappend
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 :
rrreeePersonnalisation 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.