Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
Go未経験・MVC脳のエンジニアが オニオンアーキテクチャを学ぶまで
takfjp
0
49
見やすい PRを作るために取り組んでいること
takfjp
0
71
Denoに入門していきなりAleph.jsを触ってみた
takfjp
0
550
Atomic Design とテストの○○な話
takfjp
2
2k
Node.jsのアップグレードで気をつけたこと
takfjp
1
3k
FARM スタックに触れてみる
takfjp
0
1.7k
React Testing Library の Query について整理してみた
takfjp
0
570
React.js 消えるライフサイクルメソッドについて
takfjp
0
170
React で Stateless Functional Component の書き方を盛大に間違えていた話
takfjp
0
470
Other Decks in Technology
See All in Technology
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
480
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
120
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
120
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
190
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
360
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
150
全PRの83%が AIレビューだけでマージできるようになった開発組織は その後どうなったか @2026/10
athug
0
140
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.5k
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
390
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.5k
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
150
しろおびから始める!ログ活用の第一歩
shumei_ito
0
920
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
HDC tutorial
michielstock
2
960
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
GitHub's CSS Performance
jonrohan
1033
470k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Code Reviewing Like a Champion
maltzj
529
40k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
4 Signs Your Business is Dying
shpigford
187
23k
For a Future-Friendly Web
brad_frost
184
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!