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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
takf
May 22, 2019
Technology
3.2k
2
Share
Laravel 初めての業務で遭遇したハマりポイント×2
takf
May 22, 2019
More Decks by takf
See All by takf
Denoに入門していきなりAleph.jsを触ってみた
takfjp
0
530
Atomic Design とテストの○○な話
takfjp
2
1.9k
Node.jsのアップグレードで気をつけたこと
takfjp
1
2.9k
FARM スタックに触れてみる
takfjp
0
1.7k
React Testing Library の Query について整理してみた
takfjp
0
540
React.js 消えるライフサイクルメソッドについて
takfjp
0
160
React で Stateless Functional Component の書き方を盛大に間違えていた話
takfjp
0
450
職歴1年目のフロントエンドエンジニアが インプットとアウトプットに苦しんだ話
takfjp
0
360
meguro.es.pdf
takfjp
0
150
Other Decks in Technology
See All in Technology
Gaussian Splattingの表現力を拡張する — 高周波再構成とインタラクションへのアプローチ —
gpuunite_official
0
140
フロントエンドの相手が変わった - AIが加わったWebの新しいインターフェース設計
azukiazusa1
33
11k
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
3
1.2k
『生成AI時代のクレデンシャルとパーミッション設計 — Claude Code を起点に』の執筆企画
takuros
3
2.3k
みんなの考えた最強のデータ基盤アーキテクチャ'26前期〜前夜祭〜ルーキーズ_資料_遠藤な
endonanana
0
300
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
100k
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
200
オライリーイベント登壇資料「鉄リサイクル・産廃業界におけるAI技術実応用のカタチ」
takarasawa_
0
380
「強制アップデート」か「チームの自律」か?エンタープライズが辿り着いたプラットフォームのハイブリッド運用/cloudnative-kaigi-hybrid-platform-operations
mhrtech
0
180
Vision Banana: Image Generators are Generalist Vision Learners
kzykmyzw
0
350
【関西製造業祭り2026春】現場を変える技術はここまで来た〜世界最大の製造業見本市から持って帰ってきたもの〜
tanakaseiya
0
130
Tachikawa.any 運営挨拶
daitasu
0
150
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Amusing Abliteration
ianozsvald
1
160
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Faster Mobile Websites
deanohume
310
31k
Ruling the World: When Life Gets Gamed
codingconduct
0
220
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Marketing to machines
jonoalderson
1
5.2k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
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!