Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Eloquent Modelと親和性の高い オブジェクトを作る

Eloquent Modelと親和性の高い オブジェクトを作る

E22713cc7dc634a87a5632a057b0b797?s=128

hiroshi sanbou

July 26, 2017
Tweet

Transcript

  1. Eloquent Modelと親和性の高い オブジェクトを作る

  2. ©2016 株式会社Loco Partners 自己紹介 名前  sanbou hiroshi 所属  Loco Partners

    仕事  宿泊予約サイト「Relux」のサーバーサイドエンジニア  CakePHP・Laravel
  3. ©2016 株式会社Loco Partners やりたいこと Reluxの部屋と料金の扱い 部屋 部屋料金 在庫 料金内訳 DBから取得

    アプリケーション で算出
  4. ©2016 株式会社Loco Partners やりたいこと DBに依存するモデルのリレーションは簡単 部屋 部屋料金 在庫 料金内訳 DBから取得

    アプリケーション で算出
  5. ©2016 株式会社Loco Partners やりたいこと これだけ

  6. ©2016 株式会社Loco Partners やりたいこと 検索条件とDBから取得した料金からアプリケーションで算出 部屋モデルの属性として扱いたい 部屋 部屋料金 在庫 料金内訳

    DBから取得 アプリケーション で算出
  7. ©2016 株式会社Loco Partners やりたいこと 料金内訳オブジェクト

  8. ©2016 株式会社Loco Partners やりたいこと DB依存のオブジェクト と DBに依存しないオブジェクト を まとめて扱いたい

  9. ©2016 株式会社Loco Partners やりたいこと $room->estimate $rooms->toArray()

  10. ©2016 株式会社Loco Partners やりたいこと Eloquent Modelクラスから 結合に必要な部分を抽出した基底クラスを作る

  11. ©2016 株式会社Loco Partners Eloquent Modelのデータ構造

  12. ©2016 株式会社Loco Partners Eloquent Modelのデータ構造 Attributes と Relations

  13. ©2016 株式会社Loco Partners Eloquent Modelのデータ構造 Attributes:モデルのデータを集約したプロパティ

  14. ©2016 株式会社Loco Partners Eloquent Modelのデータ構造 Attributesを管理するTrait ・Attributesを扱える ・Attributesの型の保証ができる ・Mutatorを使える

  15. ©2016 株式会社Loco Partners Eloquent Modelのデータ構造 Relations:モデル間の結合関係

  16. ©2016 株式会社Loco Partners Eloquent Modelのデータ構造 Relationsを管理するTrait ・モデル間の結合関係を配列で保持 ・結合先のモデルを参照、操作できる

  17. ©2016 株式会社Loco Partners Eloquent Modelの実装

  18. ©2016 株式会社Loco Partners Eloquent Modelの実装 Attributesを扱えるようにする

  19. ©2016 株式会社Loco Partners Eloquent Modelの実装 Relationsを扱えるようにする

  20. ©2016 株式会社Loco Partners Eloquent Modelの実装 シリアライズ対象のAttributesをカスタマイズできる

  21. ©2016 株式会社Loco Partners Eloquent Modelの実装 toArray() を保証する

  22. ©2016 株式会社Loco Partners 完成 基底クラス

  23. ©2016 株式会社Loco Partners 完成 基底クラス

  24. ©2016 株式会社Loco Partners 完成 基底クラス

  25. ©2016 株式会社Loco Partners 完成 モデルとの結合

  26. ©2016 株式会社Loco Partners 完成 $room->estimate $rooms->toArray()

  27. ©2016 株式会社Loco Partners 完成 Reluxの部屋と料金をまとめて扱えるように 部屋 部屋料金 在庫 料金内訳

  28. None