Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravel 初めての業務で遭遇したハマりポイント×2
Search
takf
May 22, 2019
Technology
2
3k
Laravel 初めての業務で遭遇したハマりポイント×2
takf
May 22, 2019
Tweet
Share
More Decks by takf
See All by takf
Denoに入門していきなりAleph.jsを触ってみた
takfjp
0
470
Atomic Design とテストの○○な話
takfjp
2
1.7k
Node.jsのアップグレードで気をつけたこと
takfjp
1
2.5k
FARM スタックに触れてみる
takfjp
0
1.4k
React Testing Library の Query について整理してみた
takfjp
0
450
React.js 消えるライフサイクルメソッドについて
takfjp
0
120
React で Stateless Functional Component の書き方を盛大に間違えていた話
takfjp
0
400
職歴1年目のフロントエンドエンジニアが インプットとアウトプットに苦しんだ話
takfjp
0
300
meguro.es.pdf
takfjp
0
120
Other Decks in Technology
See All in Technology
問 1:以下のコンパイラを証明せよ(予告編) #kernelvm / Kernel VM Study Kansai 11th
ytaka23
3
600
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2025年版)
infiniteloop_inc
13
44k
Software Architecture in an AI-Driven World
atty303
48
19k
Coding Agentに値札を付けろ
watany
3
550
Azure × MCP 入門
ry0y4n
8
1.9k
Cursorを全エンジニアに配布 その先に見据えるAI駆動開発の未来 / 2025-05-13-forkwell-ai-study-1-cursor-at-loglass
itohiro73
2
640
本当に必要なのは「QAという技術」だった!試行錯誤から生まれた、品質とデリバリーの両取りアプローチ / Turns Out, "QA as a Discipline" Was the Key!
ar_tama
9
4.9k
250510 StepFunctionのテスト自動化始めました vol.1
east_takumi
1
250
Kaigi Effect 2025 #rubykaigi2025_after
sue445
0
160
WindowsでGenesisに挑戦した話
natsutan
0
110
大規模サーバーレスプロジェクトのリアルな零れ話
maimyyym
3
250
正式リリースされた Semantic Kernel の Agent Framework 全部紹介!
okazuki
1
1.2k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Speed Design
sergeychernyshev
29
940
Making Projects Easy
brettharned
116
6.2k
Six Lessons from altMBA
skipperchong
28
3.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
580
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
800
Facilitating Awesome Meetings
lara
54
6.4k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
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!