Modifikator
- Definieren Sie einen Accessor
- Definieren Sie einen ModifikatorAttributtypkonvertierung
- Array & JSON-Konvertierung
Texttypen in JSON
.Accessoren und Modifikatoren
Definieren Sie einen Accessor
Um einen Accessor zu definieren, müssen Sie einen erstellen getFooAttribute
-Methode für das Modell, um auf die Foo
zuzugreifen Felder müssen in „Kamelschrift“ benannt werden. In diesem Beispiel definieren wir einen Accessor für die Eigenschaft first_name
. Wenn Eloquent versucht, eine first_name
-Eigenschaft abzurufen, wird dieser Accessor automatisch aufgerufen:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 获取用户的姓名. * * @param string $value * @return string */ public function getFirstNameAttribute($value) { return ucfirst($value); } }
Wie Sie sehen können, wird der Rohwert des Felds an den Accessor übergeben, sodass Sie ihn bearbeiten und das Ergebnis zurückgeben können. Wenn Sie den geänderten Wert erhalten möchten, können Sie auf das Attribut first_name
in der Modellinstanz zugreifen:
$user = App\User::find(1); $firstName = $user->first_name;
Natürlich können Sie den Accessor auch verwenden, um einen neuen berechneten Wert über den vorhandenen Attributwert zurückzugeben:
/** * 获取用户的姓名. * * @return string */ public function getFullNameAttribute(){ return "{$this->first_name} {$this->last_name}"; }
{tip} Wenn Sie diese berechneten Werte zum Array/JSON Ihres Modells hinzufügen müssen, Sie müssen sie anhängen.
Definieren Sie einen Modifikator
Um einen Modifikator zu definieren, klicken Sie auf setFooAttribute
Methode muss im Modell definiert werden. Die Foo
-Felder, auf die zugegriffen werden soll, werden mit „camelCase“ benannt. Definieren wir einen weiteren Modifikator für das Attribut first_name
. Dieser Modifikator wird automatisch aufgerufen, wenn wir versuchen, den Wert des Attributs first_name
für den Modus festzulegen: Der Modifikator
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 设置用户的姓名. * * @param string $value * @return void */ public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); } }
ruft den Wert des Attributs ab, das festgelegt wurde, sodass Sie Änderungen und Einstellungen vornehmen können Sein Wert liegt im Attribut $attributes
innerhalb des Eloquent-Modells. Wenn wir beispielsweise versuchen, den Wert des Attributs first_name
auf Sally
zu setzen:
$user = App\User::find(1); $user->first_name = 'Sally';
In diesem Beispiel akzeptiert die Methode setFirstNameAttribute
beim Aufruf den Wert Sally
als Parameter. Der Modifikator wendet dann die Funktion strtolower
an und setzt das verarbeitete Ergebnis auf das interne Array $attributes
.
Datumskonverter
Standardmäßig konvertiert Eloquent die Felder created_at
und updated_at
in Carbon-Instanzen, die die native DateTime
-Klasse von PHP erben und verschiedene nützliche Methoden bereitstellen. Sie können zusätzliche Datumsattribute hinzufügen, indem Sie das $dates
-Attribut des Modells festlegen:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 应该转换为日期格式的属性. * * @var array */ protected $dates = [ 'seen_at', ]; }
{tip} Sie können die Standardeinstellung deaktivieren, indem Sie den öffentlichen Attributwert
$timestamps
des Modells auffalse
created_at
festlegen undupdated_at
Zeitstempel.
Wenn ein Feld im Datumsformat vorliegt, können Sie den Wert auf einen UNIX-Zeitstempel, eine Datums-/Uhrzeitzeichenfolge (Y-m-d
) oder eine DateTime
/Carbon
-Instanz festlegen. Der Datumswert wird korrekt formatiert und in Ihrer Datenbank gespeichert:
$user = App\User::find(1); $user->deleted_at = now(); $user->save();
Wie oben erwähnt, werden die erhaltenen Attribute, wenn sie im Attribut $dates
enthalten sind, automatisch in Carbon konvertiert Dies ermöglicht Ihnen beispielsweise die Verwendung eines beliebigen Kohlenstoffs für Eigenschaften Methode:
$user = App\User::find(1); return $user->deleted_at->getTimestamp();
Datumsformat
Standardmäßig werden Zeitstempel im Format 'Y-m-d H:i:s'
formatiert. Wenn Sie das Zeitstempelformat anpassen müssen, können Sie das Attribut $dateFormat
im Modell festlegen. Diese Eigenschaft bestimmt, wie das Datumsattribut in der Datenbank gespeichert und formatiert wird, wenn das Modell in ein Array oder JSON serialisiert wird:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model{ /** * 模型日期字段的保存格式. * * @var string */ protected $dateFormat = 'U'; }
Attributtypkonvertierung
$casts
im Modell Eigenschaften bieten eine praktische Methode zum Konvertieren von Eigenschaften in gängige Datentypen. $casts
Das Attribut sollte ein Array sein, und die Schlüssel des Arrays sind die Namen der Attribute, die konvertiert werden müssen, und die Werte sind die Datentypen, die Sie konvertieren möchten. Die Datentypen, die die Konvertierung unterstützen, sind: integer
, real
, float
, double
, decimal:<digits>
, string
, boolean
, object
, array
, collection
, date
, datetime
und timestamp
. Wenn Sie in den Typ decimal
konvertieren müssen, müssen Sie die Anzahl der Dezimalstellen definieren, z. B.: decimal:2
Beispiel: Speichern wir es als Ganzzahl (0
) in der Datenbank oder 1
) Das is_admin
-Attribut in wird in einen booleschen Wert umgewandelt.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 这个属性应该被转换为原生类型. * * @var array */ protected $casts = [ 'is_admin' => 'boolean', ]; }
Wenn Sie nun auf das Attribut is_admin
zugreifen, wird der Rückgabewert immer in einen booleschen Typ konvertiert, obwohl der in der Datenbank gespeicherte Wert ein Ganzzahltyp ist:
$user = App\User::find(1); if ($user->is_admin) { // }
Array- und JSON-Konvertierung
Der Konvertierungstyp array
ist sehr nützlich, wenn Sie serialisierte JSON-Daten in einer Datenbank speichern. Beispiel: Wenn Ihre Datenbank über einen Feldtyp JSON
oder TEXT
verfügt, der in JSON serialisiert ist, und Sie die Typkonvertierung array
zum Eloquent-Modell hinzufügen, wird dieser automatisch in ein PHP-Array konvertiert, wenn Sie darauf zugreifen . .
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 这个属性应该被转换为原生类型. * * @var array */ protected $casts = [ 'options' => 'array', ]; }
Sobald die Konvertierung definiert ist, wird sie automatisch vom JSON-Typ in ein PHP-Array deserialisiert, wenn Sie auf die Eigenschaft options
zugreifen. Wenn Sie den Wert des Attributs options
festlegen, wird das angegebene Array auch automatisch in den JSON-Typspeicher serialisiert:
$user = App\User::find(1); $options = $user->options; $options['key'] = 'value'; $user->options = $options; $user->save();
Datumsumrechnung
bei Verwendung von date
oder datetime
Attribut, Sie können das Datumsformat angeben. Dieses Format wird verwendet, um das Modell in ein Array oder JSON zu serialisieren:
/** * 这个属性应该被转化为原生类型. * * @var array */ protected $casts = [ 'created_at' => 'datetime:Y-m-d', ];