Modifikator


Einführung

Accessor & Modifikatoren
  • Definieren Sie einen Accessor
  • Definieren Sie einen Modifikator
    • Datumskonverter
    Attributtypkonvertierung
  • Array & JSON-Konvertierung
Einführung

Wenn Sie dabei sind Eloquent Wenn Sie bestimmte Eigenschaftswerte in einer Modellinstanz abrufen oder festlegen, können Sie dies mithilfe von Accessoren und Modifikatoren tun Beredte Eigenschaftswerte werden formatiert. Beispielsweise möchten Sie möglicherweise einen Laravel-Verschlüsseler verwenden, um einen in einer Datenbank gespeicherten Wert zu verschlüsseln und den Wert dann automatisch zu entschlüsseln, wenn Sie mithilfe eines Eloquent-Modells auf die Eigenschaft zugreifen.

Zusätzlich zu benutzerdefinierten Accessoren und Modifikatoren konvertiert Eloquent auch automatisch Datumsfeldtypen in
Carbon
-Instanzen oder

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 auf false created_at festlegen und updated_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',  
         ];
Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.