はじめに
LaravelでAPIを構築する際、モデルとそのリレーションを配列やJSONに変換する必要がよくあります。 Eloquentにはこれらの変換を行うための便利なメソッドと、シリアライズされたモデルの表現にどの属性を含めるかを制御する機能が含まれています。Eloquentモデルとコレクションのより堅牢なJSONシリアライゼーションの方法については、Eloquent APIリソースのドキュメントを参照してください。
モデルと配列
配列へのシリアライゼーション
モデルと読み込まれたリレーションを配列に変換するにはtoArray メソッドを使います。
このメソッドは再帰的に動作し、すべての属性とすべてのリレーション(リレーションのリレーションも含む)が配列に変換されます。
attributesToArray メソッドを使うと、リレーションを除いたモデルの属性だけを配列に変換できます。
toArray メソッドを呼び出します。
JSONへのシリアライゼーション
モデルをJSONに変換するにはtoJson メソッドを使います。
toArray と同様に toJson メソッドも再帰的なので、すべての属性とリレーションがJSONに変換されます。
PHPがサポートするJSONエンコードオプションを指定することもできます。
toJson メソッドが自動的に呼び出されます。
リレーション
EloquentモデルがJSONに変換される際、読み込まれたリレーションはJSONオブジェクトの属性として自動的に含まれます。 また、Eloquentのリレーションメソッドは「キャメルケース」のメソッド名で定義されますが、リレーションのJSON属性は「スネークケース」になります。属性の表示制御
属性の非表示
モデルの配列またはJSON表現に含まれるパスワードなどの属性を制限したい場合があります。 そのためにはモデルにHidden 属性を使います。
Hidden 属性にリストされた属性はモデルのシリアライズされた表現に含まれません。
リレーションを非表示にするには、EloquentモデルのHidden属性にリレーションのメソッド名を追加します。
属性の公開
Visible 属性を使って、モデルの配列およびJSON表現に含まれるべき属性の「許可リスト」を定義することもできます。
Visible 属性に存在しないすべての属性は、モデルが配列やJSONに変換される際に非表示になります。
属性の一時的な表示・非表示
通常は非表示になっている属性を特定のモデルインスタンスで表示させるには、makeVisible または mergeVisible メソッドを使います。
makeVisible メソッドはモデルインスタンスを返します。
makeHidden または mergeHidden メソッドを使います。
setVisible および setHidden メソッドをそれぞれ使います。
追加属性
モデルを配列やJSONに変換する際、データベースに対応するカラムを持たない属性を追加したい場合があります。 そのためにはまず値のアクセサを定義します。Appends 属性を使います。
アクセサのPHPメソッドは「キャメルケース」で定義されていますが、属性名は通常「スネークケース」でのシリアライズ表現を使います。
appends リストに追加されると、モデルの配列とJSON表現の両方に含まれます。
appends 配列の属性もモデルに設定された visible と hidden の設定を尊重します。
実行時の追加
実行時にappend または mergeAppends メソッドを使ってモデルインスタンスに追加の属性を追加するよう指示できます。
また setAppends メソッドを使って、特定のモデルインスタンスの追加プロパティの配列全体をオーバーライドできます。
withoutAppends メソッドを使います。
日付のシリアライゼーション
デフォルトの日付フォーマットのカスタマイズ
serializeDate メソッドをオーバーライドすることで、デフォルトのシリアライゼーションフォーマットをカスタマイズできます。
このメソッドはデータベースへの保存のための日付フォーマットには影響しません。