修飾子
修飾子を定義します
- ##日付コンバータ
- #属性型の変換
- #はじめに Eloquent モデル インスタンスで特定のプロパティ値を取得または設定する場合、アクセサーと修飾子コンバーターを使用して Eloquent をフォーマットできますプロパティ値。たとえば、Laravel 暗号化機能を使用してデータベースに保存されている値を暗号化し、Eloquent モデルを使用してプロパティにアクセスするときに値を自動的に復号化することができます。
- カスタム アクセサーと修飾子に加えて、Eloquent は日付フィールド タイプを Carbon
- インスタンスに、または
- テキスト タイプを JSON に自動的に変換します。
アクセサーを定義するには、A ご覧のとおり、フィールドの生の値がアクセサーに渡されるため、フィールドを操作したり、結果を返します。変更された値を取得したい場合は、モデル インスタンスの もちろん、アクセサーを使用して既存の値を介して新しい値を返すこともできます。属性値。計算値: {tip} これらの計算値をモデルの配列/JSON に追加する必要がある場合は、追加する必要があります。 モディファイアを定義するには、モデル上で 修飾子は、プロパティに設定されている値を取得し、変更できるようにします。それとその値は、Eloquent モデル内の この例では、 デフォルトでは、Eloquent は {tip} モデルのパブリック プロパティ フィールドが日付形式の場合、値を UNIX タイムスタンプ、日時 (アクセサーと修飾子
アクセサーを定義する
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}";
}
モディファイアを定義する
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);
}
}
$attributes
属性に設定されます。たとえば、first_name
属性の値を Sally
に設定しようとすると: $user = App\User::find(1);
$user->first_name = 'Sally';
setFirstNameAttribute
メソッドは次のようになります。値 Sally
をパラメータとして受け入れる場合。次に、修飾子は strto lower
関数を適用し、処理の結果を内部の $attributes
配列に設定します。 Date Converter
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',
];
}
$timestamps を設定することで、他の日付プロパティを追加できます。
デフォルトの created_at
および updated_at
タイムスタンプを無効にするには、値を false
に設定します。 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 プロパティは配列である必要があり、配列のキーはキャストする必要があるプロパティの名前、値はキャストするデータ型です。変換をサポートするデータ型は次のとおりです:
integer、
real、
float、
double、
Decimal:<digits>、
文字列、
ブール、
オブジェクト、
配列、
コレクション、
日付 、
datetime、および
timestamp。
Decimal 型に変換する必要がある場合は、次のように小数点以下の桁数を定義する必要があります。整数 (
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', ];この記事は、