JSONAPI を構築する場合、多くの場合、モデルと関係を配列または JSON に変換する必要があります。 Eloquent には、これらの変換を実装するための便利なメソッドと、シリアル化にどのプロパティを含めるかを制御するためのメソッドが含まれています。
モデルを配列に変換する
モデルとそのロードされた関連付けを配列に変換するには、toArray を使用できます。方法。このメソッドは再帰的であるため、すべての属性とそれに関連付けられたオブジェクト属性 (関連付けられた関連付けを含む) が配列に変換されます:
$user = App\User::with('roles')->first();return $user->toArray();
コレクションも配列に変換できます:
$users = App\User::all();return $users->toArray();
モデルを JSON に変換する
モデルを JSON に変換するには、toArray と同様に toJson メソッドを使用できます。すべての属性とそれに関連付けられた属性も JSON に変換されます。
$user = App\User::find(1);return $user->toJson();モデルまたはコレクションを文字列に変換することもできます。これにより、自動的に toJson メソッドが呼び出されます。
$user = App\User::find(1);return (string) $user;モデルとコレクションは文字列に変換されるときに JSON に変換されるため、Return することができます。アプリケーションのルートまたはコントローラーから直接 Eloquent オブジェクトを使用する場合:
Route::get('users',function(){ return App\User::all();});
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 在数组中隐藏的属性 * * @var array */ protected $hidden = ['password'];}
注: 関連付けを非表示にしたい場合は、メソッド名を使用します。動的プロパティ名の代わりに、関連付けの。
さらに、visible 属性を使用して、モデル配列および JSON 表示のプロパティのホワイトリストを定義できます。
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 在数组中显示的属性 * * @var array */ protected $visible = ['first_name', 'last_name'];}
非表示のプロパティを一時的に公開します
特定のモデルの非表示属性を一時的に表示したい場合は、メソッド チェーンの形式でモデル インスタンスを返す makeVisible メソッドを使用できます。
return $user->makeVisible('attribute')->toArray();
アクセスの定義 フィールドを追加リストに追加した後、フィールド名をモデルの追加属性に追加します。
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 为用户获取管理员标识 * * @return bool */ public function getIsAdminAttribute() { return $this->attributes['admin'] == 'yes'; }}
フィールドが追加リストに追加されたら、これは、モデル配列と JSON に含まれます。appends 配列のフィールドも、 で構成されたモデルの表示設定と非表示設定に従います。
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{ /** * 追加到模型数组表单的访问器 * * @var array */ protected $appends = ['is_admin'];}