【Laravel】不要な項目はEloquentのhiddenでカットしよう
こんにちは。画面に表示しないデータベース項目を取得しないように毎回項目指定するのめんどくせーと思ったことはありませんか?今回はそんな悩みを解決してくれるEloquentの機能を紹介したいと思います。
データベースの管理項目って普段取得する必要無いですよね?
データベースのテーブルにトラブル時の調査用に管理項目を作ることありますよね?例えば、最終更新日時や、更新ユーザーなどの情報です。これらは内部調査用の情報であり、画面に表示するケースは少ない場合が多いです。クエリで毎回除外するのも面倒くさいですよね?そこで朗報です!LaravelのEloquentでは不要な項目を常に除外することができます。
モデルのhiddenに設定するだけ
不要な項目をEloquentモデルのhiddenプロパティに設定すると、指定した項目は常に取得対象外となります。元々あるUserプロパティに設定してみましょう。
class User extends Model
{
use HasFactory, SoftDeletes;
protected $hidden = []
}
こんな感じで$hiddenをオーバーライドします。今の状態では$hiddenが空の配列なので、Userモデルを取得すると以下のように全ての項目が取得されます。
>>> User::find(1)->toArray();
=> [
"id" => 1,
"name" => "joe",
"email" => "joe@xxx.xxx",
"email_verified_at" => null,
"password" => "",
"remember_token" => null,
"created_at" => null,
"updated_at" => "2021-07-31T05:18:34.000000Z",
"deleted_at" => null,
]
試しにcreated_atとupdated_at、deleted_atをhiddenに設定してみましょう。
class User extends Model
{
use HasFactory, SoftDeletes;
protected $hidden = [
'created_at',
'updated_at',
'deleted_at'
];
}
>>> User::find(1)->toArray();
=> [
"id" => 1,
"name" => "joe",
"email" => "joe@xxx.xxx",
"email_verified_at" => null,
"password" => "",
"remember_token" => null,
]
toArrayを実行したあと、$hiddenに設定した項目が消えているのがわかります。
hiddenに設定した項目を一時的に表示する
hiddenに設定した項目を一時的に表示するにはmakeVisibleメソッドを使用します。hiddenに設定した項目の内、created_atのみを表示してみます。
>>> User::find(1)->makeVisible(['created_at'])->toArray();
=> [
"id" => 1,
"name" => "joe",
"email" => "joe@xxx.xxx",
"email_verified_at" => null,
"password" => "",
"remember_token" => null,
"created_at" => null,
]
created_atのみ表示できました。
まとめ
今回は通常取得しない項目を設定する方法を解説しました。テーブルの管理項目は通常全てのテーブルに配置するので、私は開発のはじめにモデルに一律でhidden設定してしまうことが多いです。取得したい場合はmakeVisibleで取得できるので、怖がらずに設定してしまっています。APIを不要なデータが流れることが無くなるのでパフォーマンスの向上にも繋がります。皆さんも是非活用してみてください。
ディスカッション
コメント一覧
まだ、コメントがありません