Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Laravel 初めての業務で遭遇したハマりポイント×2
takf
May 22, 2019
Technology
2
2.2k
Laravel 初めての業務で遭遇したハマりポイント×2
takf
May 22, 2019
Tweet
Share
More Decks by takf
See All by takf
Node.jsのアップグレードで気をつけたこと
takfjp
1
62
FARM スタックに触れてみる
takfjp
0
88
React Testing Library の Query について整理してみた
takfjp
0
64
React.js 消えるライフサイクルメソッドについて
takfjp
0
66
React で Stateless Functional Component の書き方を盛大に間違えていた話
takfjp
0
300
職歴1年目のフロントエンドエンジニアが インプットとアウトプットに苦しんだ話
takfjp
0
200
meguro.es.pdf
takfjp
0
77
29歳でWeb業界に入って 人生がリスタートした話 (と、これからのこと)
takfjp
2
580
React + Firebase でヒートマップを実装する
takfjp
1
1.2k
Other Decks in Technology
See All in Technology
LINE WORKS API 2.0について
mmclsntr
0
140
大きくなるチームを支える技術 / Technology to support a growing SCX team
ku00
0
140
Learning from AWS Customer Security Incidents [2022]
ramimac
0
1.6k
ZOZOTOWNのProduction Readiness Checklistと信頼性向上の取り組み / Improvement the reliability of ZOZOTOWN with Production Readiness Checklist
akitok_
5
2.1k
失敗を経験したあなたへ〜建設的なインシデントの振り返りを行うために実践するべきこと〜
nobuakikikuchi
0
210
toilを解消した話
asumaywy
0
220
20220523_akibaaws-online-08-s3
hiashisan
0
100
モダンデータスタックとかの話(データエンジニアのお仕事とは)
foursue
0
490
アルプの 認証/認可分離戦略と手法
ma2k8
PRO
2
360
2022年最新版 GatsbyJS + TypeScript + microCMS でブログを作る。
hanetsuki
1
650
srenext2022-skaru
mixi_engineers
PRO
1
1k
GMO pepabo and hey 2022-05-26
katsumataryo
0
100
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
33
1.3k
YesSQL, Process and Tooling at Scale
rocio
157
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
315
19k
Code Reviewing Like a Champion
maltzj
506
37k
Robots, Beer and Maslow
schacon
152
7.1k
How STYLIGHT went responsive
nonsquared
85
3.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
268
11k
The Language of Interfaces
destraynor
148
20k
Three Pipe Problems
jasonvnalue
89
8.6k
Raft: Consensus for Rubyists
vanstee
126
5.4k
Build your cross-platform service in a week with App Engine
jlugia
219
17k
Debugging Ruby Performance
tmm1
65
10k
Transcript
Laravel 初めての業務で遭遇したハマりポイント×2 Takeru Furuichi (Twitter:@takfjp) LaraVue勉強会 2019.05.22
Laravel を初めて業務で使った時にハマったことを 話します ・Eloquent ORM 既存案件の参入時に起こったこと ・論理削除 新規案件の開発時に起こったこと
Model class Something extends Model { protected $table = 'something';
protected $fillable = [ ‘name’ ]; public $timestamps = false; }
Controller public function store(Request $request) { $something = new Something();
$something->name = $request->name; $something->save(); } Form とかからの送信で受け付けたデータを新規保存
レコードが追加されない! save の戻り値は true だった レコードが新規にできるはずが…
Why?
https://readouble.com/laravel/5.8/ja/eloquent.html 主キー Eloquent は更にテーブルの主キーが id というカラム名であると 想定しています。この規約をオーバーライドする場合は、 protected の primaryKey
プロパティを定義してください。
テーブルの中身は 主キーが大文字の ID だった!
Model class Something extends Model { protected $table = 'something';
//明示的に追加 protected $primaryKey = 'ID'; public $timestamps = false; }
Eloquent を活用するなら主キーは なるべく「 id 」に統一しましょう
論理削除 ・Company と Employee のように親子関係にあるテーブル / Modelを作成 ・employee テーブルに company_id
という外部キーを設定 ・Company↔Employee の関係は1対多 ・Company モデルでトレイトを使う use SoftDelets;
マイグレーションファイル up() メソッド内 //子テーブルに対象レコードがある場合、親テーブルのレコード削除を禁止 ->onDelete('restrict'); //親テーブルのレコード更新は許可 ->onUpdate('cascade'); Schema::table('employee', function (Blueprint
$table) { $table->integer('company_id')->unsigned(); $table->foreign('company_id')->references('id')->on('companies') ->onDelete('restrict') ->onUpdate('cascade'); });
employee を持つ Company で Company::destroy 制約で Company レコードの削除を防げるはず・・・ →普通に Company
が削除できてしまった!
Why?
use SoftDeleteで論理削除をさせている場合 物理削除と違ってdeleted_atにタイムスタンプを書き込む だけ -> 制約をすり抜けてしまう -> onDelete()はトリガーされない
Laravel Soft Cascade https://laravel-news.com/cascading-soft-deletes
Thank you!