Serialisierung
In Array serialisieren
Um das Modell und seine geladenen Assoziationen in Arrays zu konvertieren, können Sie die Methode toArray
verwenden. Dies ist eine rekursive Methode, daher werden alle Attribute und Assoziationen (einschließlich zugehöriger Assoziationen) in Arrays umgewandelt:
$user = App\User::with('roles')->first();return $user->toArray();
Sie können auch die gesamte Modellsammlung in ein Array konvertieren:
$users = App\User::all();return $users->toArray();
serialisiert nach Die JSON
-Methode toJson
kann das Modell in JSON konvertieren. Wie die Methode toArray
ist die Methode toJson
rekursiv, sodass alle Eigenschaften und Zuordnungen in JSON konvertiert werden. Sie können auch die von PHP unterstützte JSON--Kodierungsoption angeben:
$user = App\User::find(1); return $user->toJson(); return $user->toJson(JSON_PRETTY_PRINT);
Sie können Modelle oder Sammlungen auch mit der Methode toJson
in Strings konvertieren Wird automatisch aufgerufen:
$user = App\User::find(1); return (string) $user;
Da Modelle und Sammlungen bei der Konvertierung in Strings in JSON konvertiert werden, können Eloquent-Objekte direkt in den Routen oder Controllern der Anwendung zurückgegeben werden:
Route::get('users', function () { return App\User::all(); });
JSON ausblenden Attribute
Manchmal möchten Sie einige Attribute im Modellarray oder JSON ausblenden, z. B. Passwörter. Sie können das Attribut $hidden
im Modell hinzufügen:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 数组中的属性会被隐藏。 * * @var array */ protected $hidden = ['password']; }
{note} Ausblenden Beim Zuordnen muss der zugehörige Methodenname verwendet werden.
Alternativ ist es möglich, das Attribut $visible
zu verwenden, um ein Array von Modellen und eine für JSON sichtbare Whitelist zu definieren. Im konvertierten Array oder JSON werden keine anderen Attribute angezeigt:
<?phpnamespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 数组中的属性会被展示。 * * @var array */ protected $visible = ['first_name', 'last_name']; }
Sichtbare Attribute vorübergehend ändern
Wenn Sie ausgeblendete Attribute in einer Modellinstanz anzeigen müssen, können Sie dies tun Verwenden Sie die Methode makeVisible
. Methode makeVisible
gibt die Modellinstanz zurück:
return $user->makeVisible('attribute')->toArray();
Wenn Sie entsprechend sichtbare Attribute in einer Modellinstanz ausblenden müssen, können Sie die Methode makeHidden
verwenden.
return $user->makeHidden('attribute')->toArray();
JSON-Wert anhängen
Manchmal müssen Sie dem Array oder JSON der Datenbank einige Attribute hinzufügen hat keine entsprechenden Felder dafür. Um diese Funktion zu implementieren, definieren Sie zunächst einen Accessor dafür:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 为用户获取管理员标识。 * * @return bool */ public function getIsAdminAttribute() { return $this->attributes['admin'] == 'yes'; } }
Fügen Sie dann den Attributnamen im Modellattribut appends
hinzu. Beachten Sie, dass Accessoren zwar mit camelCase definiert werden, Eigenschaftsnamen jedoch normalerweise mit SnakeCase referenziert werden.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 追加到模型数组表单的访问器。 * * @var array */ protected $appends = ['is_admin']; }
Nach dem Anhängen einer Eigenschaft mit der Methode append
wird sie in das Array und JSON des Modells aufgenommen. Eigenschaften im Array appends
berücksichtigen auch die für das Modell konfigurierten Einstellungen visible
und hidden
.
Laufzeitanhängen
Verwenden Sie bei einer einzelnen Modellinstanz die Methode append
, um Eigenschaften anzuhängen, oder verwenden Sie alternativ die Methode setAppends
Schreiben Sie das gesamte Array der angehängten Attribute neu:
return $user->append('is_admin')->toArray(); return $user->setAppends(['is_admin'])->toArray();
Serialisiertes Datum
Passen Sie das Datumsformat eines beliebigen Attributs an
Sie können das Datumsformat für das Datumsattribut in der Attributtypkonvertierung von Eloquent individuell anpassen:
protected $casts = [ 'birthday' => 'date:Y-m-d', 'joined_at' => 'datetime:Y-m-d H:00', ];
Carbon Globale Anpassung
Laravel erweitert die Carbon-Datumsbibliothek, die die JSON-Serialisierung mit Carbon erleichtert. Um die Serialisierung aller Kohlenstoffdaten in Ihrer Anwendung anzupassen, können Sie die Methode Carbon::serializeUsing
verwenden. Die Methode serializeUsing
akzeptiert einen Abschluss, der ein Datum als Zeichenfolge zurückgibt.
<?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() { // } }