choclucy
Table of Contents
チームLIGHTの紹介
チーム LIGHT は現在エンジニア 5 名、デザイナー 2 名の合計 7 人のチームです。
チーム LIGHT の雑記ブログもありますので、よかったらそちらもそうぞ!
こちらは技術的な内容ではなく、メンバーの日常のことをつらつらと書いています。
LIGHT BLOG
また、不定期で LIGHT@NOON という配信イベントも開催しています。
LIGHT Team
作成した動画を友だち、家族、世界中の人たちと共有
Laravel輪読会の紹介
チーム LIGHT では、週に 1 回 1 時間、Laravel 輪読会を実施しています。
輪読会で読む本はこちらの本です!
Amazon.co.jp: PHPフレームワークLaravel Webアプリケーション開発 バージョン8.x対応 eBook : 竹澤有貴, 栗生和明, 新原雅司, 大村創太郎: Kindleストア
2021/6/1 に発売されたばかりの本で、Laravel8 にも対応しています。
ボリュームもたっぷりな上に、 Laravel の設計やテストコードに関する内容も充実しているので、オススメです!
本題
今回読んだページはP.185 ~ P.202 の「5-3 Eloquent」についてです。
※ 5-1, 5-2 は先週の輪読会で読みましたが、備忘録としては投稿していません。
5-3-1. クラスの作成
artisan
コマンドで作成可能
5-3-2. 規約とプロパティ
- テーブル名と Eloquent の関連付けにおける命名規約や、プライマリーキーとするカラムの命名等、デフォルトの規約が存在する。
- これを逸脱する場合、 Eloquent のプロパティ設定で変更可能。
5-3-3. データ検索・データ更新の基本
all()
,find()
,findOrFail()
,whereXXX()
... 等基本的なメソッドについて。
5-3-4. データ操作の応用
以下のほか、いくつかデータ操作について。
- 5-4.で触れる「クエリビルダ」でのデータ抽出方法
- アクセサ (
getXXXAttribute()
), ミューテータ (setXXXAttribute()
) - 論理削除の利用開始方法
5-3-5. 関連性を持つテーブル群の値をまとめて操作する(リレーション)
リレーション定義の方法。
hasOne
/belongsTo
hasMany
5-3-6. 実行される SQL の確認
以下のどちらかで確認できる。
toSql()
DB::enableQueryLog()
,DB::getQueryLog()
,DB::disableQueryLog()
チームで話したこと
-
Mass Assignment による脆弱性対策としての
$fillable
と$guarded
プロパティ、どちらを使うか?- 意図しない情報を公開してしまうリスクを考えると、ホワイトリスト (
$fillable
) が良い
- 意図しない情報を公開してしまうリスクを考えると、ホワイトリスト (
-
findOrFail あまり好きじゃない
- SELECT 1 個のために毎度 try-catch 処理を書くのは煩わしいという理論
- 全部このルールに則れば、1 クエリ毎ではなく上位層で例外処理を共通化できるのでは?
- トークンを含む URL (一時 URL) 生成時に使うのは納得できるとのこと
- SELECT 1 個のために毎度 try-catch 処理を書くのは煩わしいという理論
-
アクセサー・ミューテターがあまり好きじゃない
- アクセサーについて
- 画面表示用に組み立てた文字列は attribute ではないのでは? 単に
displayHoge()
で良い
- 画面表示用に組み立てた文字列は attribute ではないのでは? 単に
- ミューテターについて
- 値をセットしたときの処理を隠蔽されるので、後から案件に入ってきたメンバーは罠に嵌りそう
- 何らかの加工をする必要があるにしても、明示的にメソッドを呼び出されているほうが良い
- アクセサーについて
-
論理削除をみっちりサポートしてくれているが、普段の案件ではあまり使いたくない
- チームメンバーがこれまで関わってきた案件においては、「論理削除」が真に必要だった場面はあまりない
- データとしては不要だが物理削除が不安という場合「論理削除」ではなく「無効ステータス」にすれば良いのでは?
- チームメンバーがこれまで関わってきた案件においては、「論理削除」が真に必要だった場面はあまりない
-
SQL の確認方法
- ライブラリやエコシステムを用いると簡単に確認できる
- Fusic でよく利用されているのは以下
- 一周回って
toSql()
の出力が 1 番になってしまった- 試しに実行してみた CLI 上でシームレスに SQL を確認できるのが良い
- ライブラリやエコシステムを用いると簡単に確認できる
choclucy
PHP(Laravel/CakePHP) を書いています。
Related Posts
Laravel9 + Inertia.js + Vue3 + TypeScript環境を構築する
Daiki Urata
2023/01/05
Laravel + Vue.jsで開発した社内コミュニケーション円滑化システムの技術スタックを公開します
sarah
2022/04/20