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を使った既存WebサービスのAPI化
Search
Futoshi Endo
September 13, 2018
Programming
3.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravelを使った既存WebサービスのAPI化
Laravel MeetUpTokyo #11で発表した内容になります。
https://laravel-meetup-tokyo.connpass.com/event/93838/
Futoshi Endo
September 13, 2018
More Decks by Futoshi Endo
See All by Futoshi Endo
【PHPカンファレンス小田原2026】Webアプリケーションエンジニアにも知ってほしい オブザーバビリティ の本質
fendo181
0
1.5k
【PHPerKaigi2026】OpenTelemetry SDKを使ってPHPでAPMを自作する
fendo181
2
440
AI時代におけるドメイン駆動設計 入門 / Introduction to Domain-Driven Design in the AI Era
fendo181
0
1.3k
【PHPカンファレンス小田原2025】New RelicのAPMを活用したECサービスにおけるメール遅延解消の舞台裏
fendo181
1
4.4k
PHP8の機能を使って堅牢にコードを書く
fendo181
7
8.3k
Introduction to Typing Practice
fendo181
0
1.2k
PsySHを使った効率的なデバッグ方法について / How debug efficiently using PsySH
fendo181
1
2.7k
PHP8によるデザインパターン入門 / Introduction to Design Patterns with PHP8
fendo181
2
4.9k
PHPerがGoに入門してみた/PHPer introduction to Go.
fendo181
0
6k
Other Decks in Programming
See All in Programming
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
480
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
490
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
540
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
170
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.1k
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.6k
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
480
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
460
AIが無かった頃の素敵な出会いの話
codmoninc
1
400
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
My Coaching Mixtape
mlcsv
0
210
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
360
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Agile that works and the tools we love
rasmusluckow
331
22k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Tell your own story through comics
letsgokoyo
1
1k
Making the Leap to Tech Lead
cromwellryan
135
10k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
240
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
Transcript
ԕ౻ଠಙ(.01FQBCP *OD -BSBWFM.FFU6Q5PLZP -BSBWFMΛͬͨ طଘ8FCαʔϏεͷ"1*Խ
ԕ౻ଠಙ ͑ΜͲ͎ʔ !'FOEP 4)ࣄۀ෦(PPQFάϧʔϓ8FCΤϯδχΞ @Fendo181 @Fendo181
ɾ؆୯ʹࣗͷϗʔϜϖʔδ͕࡞Ͱ͖Δ ɾࠓͰαʔϏεՔಇͯ͠
-VNFOͰݎ࿚ͳ"1*Λઃܭ͢Δɻ ʲ༁ʳLaravelΛ5.6͔Β5.6.30ʹΞοϓάϨʔυ͢Δ(Security Release) ͜Ε·Ͱ͖ͬͯͨࣄ
ࠓ͓͍ͨ͠ࣄ
طଘͷ༷ʹ߹Θͤͨ3&45GVM"1*Λ ৽نͰ։ൃ͢Δ ࠓ͓͍ͨ͠ࣄ طଘͷ8FCαʔϏεΛ"1*Խͤ͞Δ ৽͘͠"1*Λ࡞Δ 8FC"QQ ˞ҎԼ"1*ͱ͍͏දه3&45GVM"1*ͱ͠·͢ɻ
എܠ
͋Δ৽ػೳͷ։ൃͷҝ ৽نͰ"1*Λ։ൃ͢Δࣄʹͳͬͨɻ എܠ
࣌ؒ Δ͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮ ࣮͢Δલ എܠ
εςʔλείʔυ Ͳ͏͢Δͷ͔ ΤϥʔϨεϙϯε Կ͕ฦͬͯ͘Δͷ ͲΜͳΤϯυϙΠϯ τ͕ඞཁͳͷ ϦιʔεԿ͕͋Δͷ ઃܭஈ֊ ࣌ؒ Δ͖ࣄ
Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮ എܠ
εςʔλείʔυ Ͳ͏͢Δͷ͔ ͲΜͳΤϯυϙΠϯ τ͕ඞཁͳͷ σΟϨΫτϦߏͲ͏͢Δͷ ςετ ࣮ஈ֊ طଘͷ%#ʹͲ͏ͬͯ߹ΘͤΔͷ ϦιʔεԿ͕͋Δͷ ΤϥʔϨεϙϯε
Կ͕ฦͬͯ͘Δͷ ࣌ؒ Δ͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮ എܠ
։ൃཁ݅ ɾ%#طଘͷͷΛѻ͏ ɾಠࣗͷςʔϒϧن ɾѻ͏%#͕ͭଘࡏ͢Δ എܠ ɾ3&45GVMͳ"1*Λ৽نͰ։ൃ ۀͰ։ൃະܦݧ
"1*։ൃߟ͑ΔࣄɺΔࣄଟ͗͢ʜ എܠ
͜ͷΑ͏ͳঢ়گͰ ཁ݅Λຬͨͯ͠"1*Λ։ൃ͍ͨ͠ എܠ
എܠ
എܠ ͳͥ-BSBWFMͳͷ͔ ɾυΩϡϝϯτͷใྔ͕ଟ͍ɻ3FBE%PVCMFΛݟΕղܾ͢Δɻ ࣾͰ૬ஊͰ͖Δਓ͍Δɻ ɾೝূͱೝՄɾϩάͷಋೖඞਢͰ͋Γɺͦ͜Ͱ᪴͘ͷࠔΔ -BSBWFMʹඪ४ೝূϥΠϒϥϦͷ1BTTQPSU͕͑Δ ɾڧྗͳσʔλϕʔεΫΤϦʔϏϧμʔ͕͋ΔͷͰɺෳࡶͳ ςʔϒϧεΩʔϚͰରॲͰ͖Δɻ
എܠ ࣌ؒ Δ͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτઃܭ Ϩεϙϯεͷઃܭ ΤϯυϙΠϯτͷ࣮ ఆٛ ࣮
ఆٛɾ࣮ͷ྆໘͔Β طଘ8FCαʔϏεΛ-BSBWFMͰ "1*Խ͢Δ͓͠·͢ɻ എܠ
ΞδΣϯμ
ΞδΣϯμ ɾ4XBHHFSͰ"1*ͷυΩϡϝϯτԽ ɾσΟϨΫτϦͷߏΛʹ͚ͯΤϯυϙΠϯτΛ࣮͢Δɻ ɾطଘʹ%#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ5JQT ɾ·ͱΊ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ɾ3&45GVM"1*Λߏங͢ΔͨΊͷΦʔϓϯιʔεͷϑϨʔϜϫʔΫ ɾ+40/͘͠:".-ܗࣜͰهड़͕Ͱ͖Δ ɾϩʔΧϧͰϞοΫαʔόΛ্ཱͪ͛ΔࣄՄೳ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ 4XBHHFS4QFD 4XBHHFS6*
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ͳͥ4XBHHFSΛ࠾༻ͨ͠ͷ͔ ɾҰ൪ͷཧ༝ͱͯ͠ɺΫϥΠΞϯτͱαʔόαΠυͷೝࣝΛ߹ΘͤΔҝ ɾ"1*ଆͰఆٛ͢ΔΑΓΫϥΠΞϯτଆ ͍ਓ ͕ఆٛͨ͠ํ͕ྑ͍ 4XBHHFS BQJWIPHF Λୟ͍ͨΒ ˓˓ͳϨεϙϯε
͕ཉ͍͠ ΫϥΠΞϯτଆ ɾ:".-ڞ௨ͰಡΊΔҝɺ͓ޓ͍ʹมߋमਖ਼͕͍͢͠ αʔόଆ ˓˓ͳϨεϙϯε ͕ฦͬͯ͘ΔΑ͏ ʹϨεϙϯεΛ ΈཱͯΑ͏
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ɾΤϯυϙΠϯτΛՃ͢Δʹίʔυ͕ੌ·͘͡ݟͮΒ͘ͳΔ ɾมߋ͠Α͏ʹɺߦ͙Β͍͑ͯ͘ΔͱͰͬͯमਖ਼Ͱ͖ͳ͘ͳΔʜ ɾ4XBHHFS1)1-4XBHHFSߟ͕͑ͨίʔυͷՄಡੑ͕Լ͕Δ ͦͦΫϥΠΞϯτଆ͕͍͡Εͳ͍ 4XBHHFSͱݴ͑ʜ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ JOEFYZNM SFGΛ༷ͯ͠EFpOJUJPOTͱQBUITΛׂͯ͠ཧ͢Δ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ $ tree -I node_modules . ├── definitions │ ├──author.yml
├── index.yml ├── paths │ ├── account │ │ └── authors.yml └── resolve.js ɾEFpOJUJPOTσΟϨΫτϦҎԼʹ.PEFMΛఆٛ͢Δ ɾQBUITσΟϨΫτϦҎԼͷϑΝΠϧʹΤϯυϙΠϯτͷ༷Λఆٛ͢Δ SFGΛ༷ͯ͠EFpOJUJPOTͱQBUITΛׂͯ͠ཧ͢Δ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ SFGΛ༷ͯ͠EFpOJUJPOTͱQBUITΛׂͯ͠ཧ͢Δ JOEFYZNM BVUIPSTZNM QBUITσΟϨΫτϦ BVUIPSZNM EFpOJUJPOTσΟϨΫτϦ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ͜ΕΒΛ݁߹ͤͯ͞JOEFYZNMΛ࡞͢Δ const resolve = require('json-refs').resolveRefs; const YAML = require('js-yaml');
const fs = require('fs'); const root = YAML.load(fs.readFileSync('index.yml').toString()); const options = { loaderOptions : { processContent : function (res, callback) { callback(undefined, YAML.safeLoad(res.text)); } } }; resolve(root, options).then(function (results) { console.log(YAML.dump(results.resolved)); }); node resolve.js > index_all.yml # ϑΝΠϧ໊ҙ SFTPMWFKT ৄࡉ4XBHHFS༻ϑΝΠϧΛׂͯ͠هड़͠Α͏ ׂ͞ΕͨϑΝΠϧ͕౷߹͞Εͯग़ྗ͞ΕΔ
Λ͚ͨσΟϨΫτϦߏ
3PVUFS ᶃ(&5BQJWIPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶆ
%#ૢ࡞ ϨεϙϯεΛ࡞ ϨεϙϯεΛฦ͢ ɾͭͷΤϯυϙΠϯτʹରͯ͠ɺͭͷ$POUSPMMFSͰରԠΛߦ͏ ɾ(&5BQJWIPHF )PHF$POUSPMMFS ˞ఏڙ͢ΔαʔϏεͷڥʹΑͬͯมΘΔҝɺ͋͘·ͰͭͷྫͰ͢ʂ ɾ1045BQJWIPHF Λ͚ͨσΟϨΫτϦߏ #FGPSF
├── app ├── Http │ ├── Controllers │ │ └──
HogeController.php └── Requests │ └── HogeRequest.php └── Hoge.php ├── routes ├── api.php Λ͚ͨσΟϨΫτϦߏ
SPVUFTBQJQIQ BQQ)UUQ)PHF$POUSPMMFSQIQ Λ͚ͨσΟϨΫτϦߏ Route::prefix('api/v1')->group(function () { Route::get('/hoges', 'Hoge@index'); Route::get(‘/hoges/1', 'Hoge@show');
Route::post(‘/hoges', 'Hoge@store'); Route::put(‘/hoges/1', 'Hoge@update'); Route::delete(‘/hoges/1', 'Hoge@delete'); });
3PVUFS ᶃ(&5IPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶆ
%#ૢ࡞ ϨεϙϯεΛ࡞ ϨεϙϯεΛฦ͢ ɾஈʑͱ$POUSPMMFS͕ංେԽͯ͘͠Δͷ͕ݟ͑ͯ͘Δʜ Λ͚ͨσΟϨΫτϦߏ
Λ͚ͨσΟϨΫτϦߏ Ͳ͏ͨ͠ͷ͔ʜ
3PVUFS ᶃ(&5BQJWIPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶇ
ϨεϙϯεΛฦ͢ 4FSWJDF ɾϏδωεϩδοΫΛ"QQ4FSWJDFΓग़͢ ɾ(&5BQJWIPHF )PHF$POUSPMMFS!JOEFY ᶆ %#ૢ࡞ ϨεϙϯεΛ࡞ ɾ$POUSPMMFSʹϏδωεϩδοΫΛॻ͔ͣʹ)551ͷؔ৺ࣄʹूதͤ͞Δɻ ɾϧʔςΟϯάαʔϏεΫϥε -JTU4FSWJDFQIQ ɾ1045BQJWIPHF )PHF$POUSPMMFS!TUPSF $SFBUF4FSWJDFQIQ Λ͚ͨσΟϨΫτϦߏ "GUFS
├── app ├── Http │ ├── Controllers │ │ └──
HogeController.php └── Requests │ └── HogeRequest.php └── Hoge.php ├── Servicies └── Hoge │ └── ListService.php #GET Ұཡ │ └── ShowService.php #GET ৄࡉ │ └── CreateService.php #POST │ └── DeleteService.php #DELET ├── routes ├── api.php Λ͚ͨσΟϨΫτϦߏ
BQQ4FSWJDFT)PHF-JTU4FSWJDFQIQ Λ͚ͨσΟϨΫτϦߏ ɾ"QQ4FSWJDFͰΤϯυϙΠϯτΛୟ͍ͨࡍͷϏδωεϩδοΫͷॲཧΛ٧ΊΔ
Λ͚ͨσΟϨΫτϦߏ ɾ$POUSPMMFSͰ͋͘·ͰϨεϙϯεΛKTPOͰฦ͚ͩ͢ʹప͢Δ
%#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
wѻ͏%#͕ෳଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔ΒडऔͬͨΛࣗಈతʹม͢Δɻ %#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ FOWͰઃఆΛՃ͢Δ # 1ͭΊͷDB DB_CONNECTION=mysql1 DB_HOST=database DB_PORT=3306 DB_DATABASE=database_1 DB_USERNAME=hoge
DB_PASSWORD=secret # 2ͭΊͷDB DB_CONNECTION_2=mysql2 DB_HOST_2=database DB_PORT_2=3306 DB_DATABASE_2=database_2 DB_USERNAME_2=fuga DB_PASSWORD_2=secret FOW
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ DPOpHaEBUBCBTFQIQʹઃఆΛՃ͢Δ # 2ͭΊͷDBͷઃఆΛՃ͢Δ 'mysql2' => [ 'driver' => 'mysql',
'host' => env(‘DB_HOST_2‘, '127.0.0.1'), 'port' => env(‘DB_ACC_PORT_2', '3306'), 'database' => env(‘DB_DATABASE_2', 'forge'), 'username' => env(‘DB_USERNAME_2', 'forge'), 'password' => env(‘DB_PASSWORD_2', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], DPOpHaEBUBCBTFQIQ ѻ͏%#͕ෳଘࡏ͢Δ߹
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ $date = DB::connection(env(‘DB_CONNECTION_2’)) ->table(’t_name’) ->get() NZTRMͷઃఆͰ%#ʹଓͨ͠ঢ়ଶͰσʔλΛऔಘ͢Δࣄ͕ՄೳͱͳΔ FOW ѻ͏%#͕ෳଘࡏ͢Δ߹
˞FOW Λݺͼग़͢ࡍͷҙ %#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ ৄࡉ:Laravelͷ .env ͷconfig()ܦ༝Ͱ͏ɻ <?php class HogeController extends Controller
{ public function getHoge() { dd( env('MY_ENV'), config('my-app.my-env') ); } } ˞։ൃڥͰྑ͍͕DPOpHDBDIFͨ͠ঢ়ଶͰͷຊ൪ڥʹ͓͍ͯFOW ͕Λฦ͞ͳ͍ɻ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ˞։ൃڥͰྑ͍͕DPOpHDBDIFͨ͠ঢ়ଶͰͷຊ൪ڥʹ͓͍ͯFOW ͕Λฦ͞ͳ͍ɻ ѻ͏%#͕ෳଘࡏ͢Δ߹ ৄࡉ:Laravelͷ .env ͷconfig()ܦ༝Ͱ͏ɻ null "Full" php
artisan config:cache FOW Ͱݺͼग़͢ͱOVMM͕ฦͬͯ͘Δɻ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ DPOpH Λͬͯݺͼग़͢Α͏ʹ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ Psy Shell v0.9.8 (PHP 7.2.1 —
cli) by Justin Hileman >>> dump(config('database.connections.mysql2')) array:12 [ "driver" => "mysql" "host" => "database" "port" => "3306" "database" => "database_2" "username" => "fuga" "password" => "secret" "unix_socket" => "" "charset" => "utf8" "collation" => "utf8_general_ci" "prefix" => "" "strict" => true "engine" => null ]
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ DPOpH Λͬͯݺͼग़͢Α͏ʹ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ $date = DB::connection(config(‘database.connections.mysql2’)) ->table(’t_name’) ->get()
wѻ͏%#͕ෳଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔ΒडऔͬͨΛࣗಈతʹม͢Δɻ %#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ +------------------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key
| Default | Extra | +------------------------+--------------+------+-----+-------------------+-----------------------------+ | user_id | int(20) | NO | PRI | NULL | auto_increment | | name | varchar(32) | YES | MUL | NULL | | | email | varchar(255) | YES | MUL | NULL | | | state | tinyint(4) | YES | MUL | NULL | | | make_date | datetime | YES | MUL | NULL | | | update_date | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +------------------+--------------+------+-----+-------------------+-----------------------------------+ U@VTFSςʔϒϧ TUBUF༗ޮ TUBUFແޮ (&5BQJVTST TUBUFFOBCMFE (&5BQJVTST TUBUFEJTBCMFE TUBUFFOBCMFEͳ͍Αʂ (&5BQJVTST TUBUFBMM "1* ΫϥΠΞϯτ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ ৄࡉ-BSBWFM&MPRVFOUɿϛϡʔςλ
ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ %#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ (&5BQJVTST TUBUFFOBCMFE TUBUFFOBCMFE ΫϥΠΞϯτ "1* TUBUF %# ࠓճͷέʔεͰTUBUFΛม͍ͨ͠ͷͰΞΫηαΛ࡞Δ
HFU4UBUF"UUSJCVUF $user = App\User::all(); # state=1ͷuserΛऔಘ͢ΔΑ͏ʹࣗಈͰม͢Δ $firstName = $user->state(’enabled’)->get()
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ
$users = User::where('user_id', $this->request->userId) ->state(User::toStateKey($state)) ->limit($limit) ->offset($offset) ->get(); %#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ΞΫηαɾϛϡʔςʔλΛ͏ࣄͰΫΤϦʔύϥϝʔλͰडऔͬͨΛ
ࣗಈͰ&MPRVFOͰ͑ΔΑ͏ʹͯ͠σʔλΛऔಘ͢Δࣄ͕Ͱ͖Δɻ TUBUFFOBCMFE͕ૹΒΕͯ͘ΔͱTUBUFʹม͞ΕΔ TUBUFEJTBCMFE͕ૹΒΕͯ͘ΔͱTUBUFʹม͞ΕΔ TUBUFBMM͕ૹΒΕͯ͘ΔͱɺԿ͠ͳ͍ͷͰࣗಈͰ TUBUFPSTUBUFͷσʔλΛऔಘ͢Δɻ ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ
wѻ͏%#͕ෳଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔ΒडऔͬͨΛࣗಈతʹม͢Δɻ %#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
·ͱΊ
·ͱΊ ɾ3&45GVM"1*Λ͔Β࡞͢ΔͷେมͳͷͰɺ·ͣ ΫϥΠΞϯτଆͱ૬ஊ͠ͳ͕ΒϨεϙϯεΛ͔ͬ͠Γઃܭ͢Δɻ ɾطଘͷ%#ͷ༷ʹରͯ͠-BSBWFMͳΒɺඋΘͬͯΔػೳΛ͍͜ͳ͢ ɹ͚ͩͰ͋ΔఔͷࣄͰ͖Δɻ ɾͪΐͬͱ͍͠ࣄΛΔ߹ΛΘ͚ΔΑ͏ʹ͢Δɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ ϓϩϑΟʔϧGFOEP1SPpMF