hoge

いわゆるWeb Developerの備忘録

【Laravel】Eloquentモデルのシリアライズでデータ通信量を削減する

データベース上に登録してある項目から、表示するときに新しい項目が必要になったとき、例えば姓・名は登録してあるがフルネームとしては登録していない場合、Vue 側で以下のようにして書いていました。

const full_name = `${user.last_name} ${user.first_name}`;

このようにすると必要になったときに毎回この変数を用意しなければならなかったのですが、Laravel の Eloquent モデルで項目を追加してから渡すということができることを昨日知りました。

Eloquent:シリアライズ 6.0 Laravel

アクセサを用意して、appendsプロパティに配列として渡すことで実装できます。

フルネームを取得したい場合は以下のようになります。

protected $appends = [
  'full_name',
];

public function getFullNameAtteribute() {
  return "{$this->last_name} {$this->first_name}";
}

リレーションを使って別の項目を操作したい場合はアクセサがかなり役立ちます。

ユーザの所有するデバイスの数を管理するテーブルがあったとき、今までは、

return User::with('devices');

のようにして、フロント側で、

const count = user.devices.length();

と表示していましたが、この方法ではdeviceに関する必要ではない情報まで全て取得してしまうため 1 回での転送量が増えてしまいます。

アクセサを使うことで取得したいデータだけをuserに追加することが可能になります。

protected $appends = [
  'device_count'
];

public function getDeviceCountAtteribute() {
  return $this->devices()->count();
}

SPA ではデータ通 j 信量を少なくして素早くレイアウトを構築することが重要なので、こういったデータ削減は特に必要になってきます。


同じカテゴリー(PHP)の記事
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
【Laravel】Eloquentモデルのシリアライズでデータ通信量を削減する
    コメント(0)