[ Laravel 5.2 ドキュメント ] Eloquent ORM -- アクセサと修飾子
1. はじめに
アクセサーと修飾子を使用すると、モデルのプロパティを取得したり、その値を設定したりするときに Eloquent プロパティをフォーマットできます。たとえば、Laravel 暗号化機能を使用してデータベースに保存されているデータを暗号化し、Eloquent モデルでアクセスしたときに自動的に復号化することができます。
カスタム アクセサーと修飾子に加えて、Eloquent は日付フィールドを Carbon インスタンスに自動的に変換し、テキストを JSON に変換することもできます。
2. アクセサーと修飾子
アクセサーを定義する
アクセサーを定義するには、モデル内に getFooAttribute メソッドを作成する必要があります。ここで、Foo はアクセスするフィールド名です (キャメル ケースの命名規則を使用します)。この例では、 first_name プロパティのアクセサーを定義します。これは、 first_name の値を取得するときに Eloquent によって自動的に呼び出されます:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 获取用户的名字 * * @param string $value * @return string */ public function getFirstNameAttribute($value) { return ucfirst($value); }}
ご覧のとおり、フィールドのネイティブ値が accessor に渡され、返されます。処理された値。値にアクセスするには、 first_name にアクセスするだけです:
$user = App\User::find(1);$firstName = $user->first_name;
修飾子を定義します
修飾子を定義するには、モデル内で setFooAttribute メソッドを定義する必要があります。ここで、Foo はアクセスするフィールドです (キャメルケースの命名規則を使用します)。次に、モデルの first_name に値を割り当てるときに自動的に呼び出される first_name 属性の修飾子を定義しましょう:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 设置用户的名字 * * @param string $value * @return string */ public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); }}
この修飾子は、設定する属性値を取得し、値を操作して内部プロパティ値を設定できるようにします。 Eloquentモデルの数値は操作後の値です。たとえば、Sally の first_name 属性を設定しようとすると、次のようになります:
$user = App\User::find(1);$user->first_name = 'Sally';
この場合、setFirstNameAttribute メソッドが呼び出され、パラメーター Sally が渡され、修飾子はそれに対して strto lower 関数を呼び出し、処理された値を内部属性に設定します。 。 価値。
3. Date Modifier
デフォルトでは、Eloquent は created_at 列と updated_at 列の値を Carbon インスタンスに変換し、PHP のネイティブ Datetime クラスを継承し、さまざまな便利なメソッドを提供します。
どのフィールドが自動的に調整および変更されるかをカスタマイズでき、モデルの $dates 属性をオーバーライドすることで調整を完全に無効にすることもできます:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 应该被调整为日期的属性 * * @var array */ protected $dates = ['created_at', 'updated_at', 'disabled_at'];}
フィールドが日付形式の場合は、その値を UNIX タイムスタンプに設定できます。日付文字列 (Y-m-d)、日付時刻文字列、Datetime/Carbon インスタンス、日付値は、正しい形式でデータベースに自動的に保存されます:
$user = App\User::find(1);$user->disabled_at = Carbon::now();$user->save();
前述したように、$dates にリストされている値を取得するとき、配列プロパティの場合、それらは自動的に Carbon インスタンスに変換され、プロパティで任意の Carbon メソッドを使用できるようになります:
$user = App\User::find(1);return $user->disabled_at->getTimestamp();
タイムスタンプをカスタマイズする必要がある場合、デフォルトでは、タイムスタンプ形式は「Y-m-d H:i:s」です。形式を指定するには、モデルに $dateFormat 属性を設定します。これにより、日付属性がデータベースに保存され、配列または JSON にシリアル化されるときの形式が決まります。
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Flight extends Model{ /** * 模型日期的存储格式 * * @var string */ protected $dateFormat = 'U';}
4. 属性変換
モデルの $casts 属性は属性フィールドです。一般的なデータ型に変換するための便利なメソッドが提供されています。 $casts プロパティは配列形式で、キーはキャストするプロパティの名前、値はキャストする型です。現在サポートされている変換タイプには、整数、実数、浮動小数点数、倍精度浮動小数点数、文字列、ブール値、オブジェクト、配列、コレクション、日付、日時が含まれます。
たとえば、is_admin 属性を整数型 (0 または 1) からブール型に変換してみましょう:
<?phpnamespace 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 形式で保存されたフィールドを操作する場合に特に便利です。たとえば、データベースにシリアル化された JSON を含む TEXT フィールド型がある場合、配列型を追加します。そのプロパティへの変換は、Eloquent モデルで値にアクセスするときに自動的に PHP 配列に逆シリアル化されます:
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 应该被转化为原生类型的属性 * * @var array */ protected $casts = [ 'options' => 'array', ];}
型変換が定義された後、オプション プロパティにアクセスすると、オプションを設定すると JSON から PHP 配列に自動的に逆シリアル化されます。属性を指定すると、指定された配列はストレージ用に自動的に JSON に変換されます:
$user = App\User::find(1);$options = $user->options;$options['key'] = 'value';$user->options = $options;$user->save();

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
