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
2.8k
Laravel 初めての業務で遭遇したハマりポイント×2
takf
May 22, 2019
Tweet
Share
More Decks by takf
See All by takf
Denoに入門していきなりAleph.jsを触ってみた
takfjp
0
360
Atomic Design とテストの○○な話
takfjp
2
1.5k
Node.jsのアップグレードで気をつけたこと
takfjp
1
2.2k
FARM スタックに触れてみる
takfjp
0
880
React Testing Library の Query について整理してみた
takfjp
0
330
React.js 消えるライフサイクルメソッドについて
takfjp
0
100
React で Stateless Functional Component の書き方を盛大に間違えていた話
takfjp
0
370
職歴1年目のフロントエンドエンジニアが インプットとアウトプットに苦しんだ話
takfjp
0
270
meguro.es.pdf
takfjp
0
110
Other Decks in Technology
See All in Technology
Datadog Cloud SIEMを使ってAWS環境の脅威を可視化した話/lifeistech-datadog-cloud-siem
gidajun
0
480
コミュニティサービスに「あなたへ」フィードを リリースするまでの試行錯誤
takapy
1
150
Amazon FSx for NetApp ONTAPのパフォーマンスチューニング要素をまとめてみた #cm_odyssey #devio2024
non97
0
220
データ分析を支える技術 生成AI再入門
ishikawa_satoru
0
380
MySQLのロックの種類とその競合
yoku0825
6
1.6k
目標設定は好きですか? アジャイルとともに目標と向き合い続ける方法 / Do you like target Management?
kakehashi
10
3k
ギークの理想が7つ集まるエムスリーで夢を叶えよう - エムスリー株式会社
m3_engineering
1
260
AWSでRAGを作る法方
sonoda_mj
1
140
RAGのサービスをリリースして1年3ヶ月が経ちました
segavvy
4
960
簡単に始めるSnowflakeの機械学習
nayuts
1
190
[2024最新版]AWS Control Towerを使ったセキュアなマルチアカウント環境の作り方
hiashisan
0
270
GoとアクターモデルでES+CQRSを実践! / proto_actor_es_cqrs
ytake
1
160
Featured
See All Featured
Embracing the Ebb and Flow
colly
81
4.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
78
15k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
Being A Developer After 40
akosma
72
580k
Typedesign – Prime Four
hannesfritz
37
2.2k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
Code Reviewing Like a Champion
maltzj
517
39k
Mobile First: as difficult as doing things right
swwweet
219
8.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
28
2.2k
Music & Morning Musume
bryan
43
5.9k
Building Adaptive Systems
keathley
34
2k
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!