修飾子


修飾子を定義します

アクセサーと修飾子

アクセサーを定義する

アクセサーを定義するには、A getFooAttribute メソッドをモデル上に作成する必要があり、アクセスする Foo フィールドには「キャメル ケース」を使用して名前を付ける必要があります。この例では、first_name プロパティのアクセサーを定義します。このアクセサーは、Eloquent が first_name プロパティを取得しようとすると自動的に呼び出されます:

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model{   
     /**
     * 获取用户的姓名.
     *
     * @param  string  $value
     * @return string
     */  
       public function getFirstNameAttribute($value) 
          {      
            return ucfirst($value);   
           }
        }

ご覧のとおり、フィールドの生の値がアクセサーに渡されるため、フィールドを操作したり、結果を返します。変更された値を取得したい場合は、モデル インスタンスの first_name 属性にアクセスできます:

$user = App\User::find(1);
$firstName = $user->first_name;

もちろん、アクセサーを使用して既存の値を介して新しい値を返すこともできます。属性値。計算値:

/**
 * 获取用户的姓名.
 *
 * @return string
 */
 public function getFullNameAttribute(){ 
    return "{$this->first_name} {$this->last_name}";
  }

{tip} これらの計算値をモデルの配列/JSON に追加する必要がある場合は、追加する必要があります。

モディファイアを定義する

モディファイアを定義するには、モデル上で setFooAttribute メソッドを定義する必要があります。アクセスされる Foo フィールドには、「camelCase」を使用して名前が付けられます。 first_name 属性に別の修飾子を定義しましょう。この修飾子は、スキーマに first_name プロパティ値を設定しようとすると自動的に呼び出されます:

<?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);   
      }
   }

修飾子は、プロパティに設定されている値を取得し、変更できるようにします。それとその値は、Eloquent モデル内の $attributes 属性に設定されます。たとえば、first_name 属性の値を Sally に設定しようとすると:

$user = App\User::find(1);
$user->first_name = 'Sally';

この例では、setFirstNameAttribute メソッドは次のようになります。値 Sally をパラメータとして受け入れる場合。次に、修飾子は strto lower 関数を適用し、処理の結果を内部の $attributes 配列に設定します。

Date Converter

デフォルトでは、Eloquent は created_at フィールドと updated_at フィールドを、PHP ネイティブから継承する Carbon インスタンスに変換します。 DateTime クラスは、さまざまな便利なメソッドを提供します。モデルの $dates プロパティを設定することで、他の日付プロパティを追加できます:

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model{   
     /**
     * 应该转换为日期格式的属性.
     *
     * @var array
     */  
     protected $dates = [       
      'seen_at',  
      ];
    }

{tip} モデルのパブリック プロパティ $timestamps を設定することで、他の日付プロパティを追加できます。 デフォルトの created_at および updated_at タイムスタンプを無効にするには、値を false に設定します。

フィールドが日付形式の場合、値を UNIX タイムスタンプ、日時 (Y-m-d) 文字列、または DateTime / ## に設定できます。 #カーボンインスタンス。日付値は正しくフォーマットされてデータベースに保存されます:

$user = App\User::find(1);
$user->deleted_at = now();
$user->save();

前述のように、取得した属性が

$dates 属性に含まれる場合、それらは自動的に変換されます。 Carbon インスタンス。プロパティで任意の Carbon メソッドを使用できます。

$user = App\User::find(1);
return $user->deleted_at->getTimestamp();

日付形式

デフォルトでは、タイムスタンプは次の形式でフォーマットされます。形式

'Y-m-d H:i:s'。タイムスタンプ形式をカスタマイズする必要がある場合は、モデルで $dateFormat プロパティを設定します。このプロパティは、モデルが配列または JSON にシリアル化されるときに、日付属性がデータベースにどのように保存され、フォーマットされるかを決定します:

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class Flight extends Model{   
     /**
     * 模型日期字段的保存格式.
     *
     * @var string
     */  
     protected $dateFormat = 'U';
    }

属性型変換

モデルの

$casts 属性は、属性を一般的なデータ型に変換する便利な方法を提供します。 $casts プロパティは配列である必要があり、配列のキーはキャストする必要があるプロパティの名前、値はキャストするデータ型です。変換をサポートするデータ型は次のとおりです: integerrealfloatdoubleDecimal:<digits>文字列ブールオブジェクト配列コレクション日付datetime、および timestampDecimal 型に変換する必要がある場合は、次のように小数点以下の桁数を定義する必要があります。整数 (0 または 1

の形式でデータベースに保存されている

is_admin 属性) はブール値に変換されます。

    <?php   
     namespace App;    
     use Illuminate\Database\Eloquent\Model;    
     class User extends Model  
       {       
        /**
         * 这个属性应该被转换为原生类型.
         *
         * @var array
         */       
          protected $casts = [        
              'is_admin' => 'boolean',        
              ];    
            }
is_admin 属性にアクセスすると、データベースに格納されている値は整数型ですが、戻り値は常にブール型に変換されます:
    $user = App\User::find(1); 
    if ($user->is_admin) {      
      //  
      }
# ##################################

配列と JSON の変換

array 型の変換は、シリアル化された JSON データをデータベースに保存する場合に非常に便利です。例: データベースに JSON にシリアル化される JSON または TEXT フィールド タイプがあり、array タイプ変換が Eloquent モデルに追加される場合、 when アクセスすると自動的に PHP 配列に変換されます。

    <?php  
      namespace App;    
      use Illuminate\Database\Eloquent\Model;    
      class User extends Model    {       
       /**
         * 这个属性应该被转换为原生类型.
         *
         * @var array
         */        
        protected $casts = [          
          'options' => 'array',     
            ];   
         }

変換が定義されると、options プロパティにアクセスすると、自動的に JSON 型から PHP 配列に逆シリアル化されます。 options 属性の値を設定すると、指定された配列も自動的に JSON タイプのストレージにシリアル化されます:

    $user = App\User::find(1);    
    $options = $user->options;    
    $options['key'] = 'value';    
    $user->options = $options;    
    $user->save();

##日付変換

date または datetime 属性を使用する場合、日付の形式を指定できます。この形式は、モデルを配列または JSON にシリアル化するために使用されます:

    /**
     * 这个属性应该被转化为原生类型.
     *
     * @var array
     */    
     protected $casts = [     
        'created_at' => 'datetime:Y-m-d',  
         ];

この記事は、