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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
takf
May 22, 2019
Technology
3.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravel 初めての業務で遭遇したハマりポイント×2
takf
May 22, 2019
More Decks by takf
See All by takf
Denoに入門していきなりAleph.jsを触ってみた
takfjp
0
540
Atomic Design とテストの○○な話
takfjp
2
1.9k
Node.jsのアップグレードで気をつけたこと
takfjp
1
2.9k
FARM スタックに触れてみる
takfjp
0
1.7k
React Testing Library の Query について整理してみた
takfjp
0
550
React.js 消えるライフサイクルメソッドについて
takfjp
0
160
React で Stateless Functional Component の書き方を盛大に間違えていた話
takfjp
0
460
職歴1年目のフロントエンドエンジニアが インプットとアウトプットに苦しんだ話
takfjp
0
360
meguro.es.pdf
takfjp
0
160
Other Decks in Technology
See All in Technology
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
140
起点・思考・出力で分解する 〜PM業務の自動化設計〜
kazu_kichi_67
2
1.2k
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.7k
攻撃者がいなくてもAIエージェントはインシデントを起こす
nomizone
0
170
そこにあるから地図ができる~位置を示す"モノ"を愉しむ~ - Interface 2026年6月号GPS特集オフ会 / interface_202606_GPS_offline
sakaik
1
140
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
160
ClaudeCodeの公式Memory Architecture
nagatsu
0
120
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
0
270
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
300
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
310
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
380
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
560
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.1k
KATA
mclloyd
PRO
35
15k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Documentation Writing (for coders)
carmenintech
77
5.4k
30 Presentation Tips
portentint
PRO
1
330
Site-Speed That Sticks
csswizardry
13
1.2k
Prompt Engineering for Job Search
mfonobong
0
360
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Making Projects Easy
brettharned
120
6.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Tell your own story through comics
letsgokoyo
1
980
The Cult of Friendly URLs
andyhume
79
6.9k
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!