Laravel
ウェブ職人のためのPHPフレームワーク
本家
https://laravel.com/
git
https://github.com/laravel
動画チュートリアル(英語)
https://laracasts.com/
※前スレ
【PHP】Laravel【フレームワーク】 Part.9
https://medaka.5ch.net/test/read.cgi/php/1636499781/
【PHP】Laravel【フレームワーク】 Part.10
https://medaka.5ch.net/test/read.cgi/php/1647325775/
【PHP】Laravel【フレームワーク】 Part.11
https://medaka.5ch.net/test/read.cgi/php/1658553311/
【PHP】Laravel【フレームワーク】 Part.12
■ このスレッドは過去ログ倉庫に格納されています
2022/08/31(水) 18:53:51.77ID:???
374nobodyさん
2023/02/24(金) 11:41:02.41ID:??? 誰もそんな事書いてないが
トレンドの話をしてるんだよ
トレンドの話をしてるんだよ
375nobodyさん
2023/02/24(金) 11:48:22.35ID:??? 質問して他人にお願いしてる立場のくせに偉そうだな
376nobodyさん
2023/02/24(金) 12:19:22.08ID:???378nobodyさん
2023/02/24(金) 12:54:58.77ID:??? たしかにLaravelダメすぎだな
https://i.imgur.com/kh6OKpa.jpg
https://i.imgur.com/kh6OKpa.jpg
380nobodyさん
2023/02/24(金) 19:00:38.58ID:??? まあphp自体伸びる理由があまりないしな
Laravelはよくキープしてるよ
Laravelはよくキープしてるよ
381nobodyさん
2023/02/24(金) 19:51:59.29ID:??? アメリカのトレンド検索したら、Pythonが圧倒的だった
382nobodyさん
2023/02/24(金) 21:53:37.25ID:??? シェアは普通にphpが圧倒的だと思うぞ
https://trends.builtwith.com/framework
https://trends.builtwith.com/framework
383nobodyさん
2023/02/25(土) 05:10:01.18ID:??? ちんちん!シュッ!シュッ!九州!
384nobodyさん
2023/03/01(水) 09:22:50.37ID:2EEqTc50 ゥララヴォゥ
385nobodyさん
2023/03/02(木) 13:31:14.48ID:??? バックエンドだけLaravel使ってる人います?
Laravel側でjsonを生成して、フロントで受け取るみたいな
Laravel側でjsonを生成して、フロントで受け取るみたいな
386nobodyさん
2023/03/02(木) 14:35:37.21ID:??? いくらでもいるだろ
387nobodyさん
2023/03/02(木) 14:59:52.77ID:??? Laravelでvue使っても大概そうなるやろ
389nobodyさん
2023/03/02(木) 20:45:55.82ID:??? そいやそうだね
390nobodyさん
2023/03/02(木) 21:53:27.63ID:??? 今のプロジェクトはSPAで一応Laravelで一つだけのページは返すけど
基本はAPIの為に使っている
フロントはvueでやってる
基本はAPIの為に使っている
フロントはvueでやってる
391nobodyさん
2023/03/03(金) 09:49:42.71ID:??? やっぱLaravel使いはvueが多いよね
ReactやAngulerよりも使いやすいのかな
ReactやAngulerよりも使いやすいのかな
392nobodyさん
2023/03/03(金) 09:52:59.21ID:??? 皆がvue使ってるから選択している安直な理由だと思う
393nobodyさん
2023/03/03(金) 12:27:29.04ID:??? ららぼ〜、実際に使ってみようかと思っているんだが、メジャーバージョン
アップが頻繁すぎて、ちょっと怖いでござるよ。
先輩諸氏はそのへんどうしているのござるか?
アップが頻繁すぎて、ちょっと怖いでござるよ。
先輩諸氏はそのへんどうしているのござるか?
394nobodyさん
2023/03/03(金) 12:50:24.36ID:??? Laravelは今でも開発が続けられておるでござる。新しい機能や改善を含んだメジャーバージョンアップが頻繁に行われているのじゃ。
しかし、アップデートすることで新しい機能や改善を取り入れることができるのじゃから、先輩方はちゃんとバージョンアップを行っているのじゃ。
ただし、アップデートにはリスクもあるから、事前にテストを行って問題が起きないか確認することが大切じゃ。
LaravelにはLTS(Long-Term Support)版もあって、安定したバージョンを選ぶこともできるのじゃ。
だから、プロジェクトによっては新しい機能を必要とせず、安定性を重視する場合はLTS版を使うこともできるのじゃ。
でも、新しい機能を取り入れたい場合は、定期的にバージョンアップを行って最新の機能を活用することも大切じゃ。
しかし、アップデートすることで新しい機能や改善を取り入れることができるのじゃから、先輩方はちゃんとバージョンアップを行っているのじゃ。
ただし、アップデートにはリスクもあるから、事前にテストを行って問題が起きないか確認することが大切じゃ。
LaravelにはLTS(Long-Term Support)版もあって、安定したバージョンを選ぶこともできるのじゃ。
だから、プロジェクトによっては新しい機能を必要とせず、安定性を重視する場合はLTS版を使うこともできるのじゃ。
でも、新しい機能を取り入れたい場合は、定期的にバージョンアップを行って最新の機能を活用することも大切じゃ。
395nobodyさん
2023/03/03(金) 12:56:47.19ID:??? LTSなんてもうねーよw
397nobodyさん
2023/03/03(金) 14:08:33.98ID:??? 問題はどれに復活するかだな
今後のバージョンに復活するのか、既存のバージョンになるのか
個人的には8をLTSにしてほしいが
今後のバージョンに復活するのか、既存のバージョンになるのか
個人的には8をLTSにしてほしいが
398nobodyさん
2023/03/03(金) 19:03:15.96ID:??? 復活するなら次の11か最新の10じゃね?
過去のバージョンは流石に無さそう
過去のバージョンは流石に無さそう
399nobodyさん
2023/03/13(月) 11:55:32.17ID:??? 質問書こうとしたらChatGPTで解決してしまったのですが、一応書いときます。。(以下質問)
ちょっとルーティングで出来る方法があるかが分からないので、教えてください
・web.phpでresourceをgroupの中に入れたい
・resourceのeditで(URLで)idを指定して表示させたい。例「customers/1/edit」
・しかしcontrollerのfunctionの引数にクラスを指定している(idから自動的にモデルがfindされるLaravelの仕様を利用)
<変更前>
[web.php]
Route::get('customers/change', 'Customer\CustomerController@change'); // こういうのがいっぱいあってresourceもろともgroupに入れたい
Route::resource('customers', 'Customer\CustomerController');
[CustomerController]
public function edit(Customer $customer){~~諸々の処理~~}
<こうしたい>
[web.php]
Route::group(['prefix' => 'customers', 'as' => 'customers.'], function () {
Route::get('change', 'Customer\CustomerController@change');
Route::resource('/', 'Customer\CustomerController');
}
[CustomerController]
public function edit(Customer $customer){~~諸々の処理~~}
ですが、後者だとURL「customers/1/edit」となったとき、not foundになります。
「customers」や「customers/create」等は正常に表示されます。
php artisan route:listでは
「customers/{customer}/edit」が「customers/{}/edit」になってしまいます。
groupの外にresourceの記述を出せば解決するのですが、
何かありそうなので、もし知っていたら教えてもらえますでしょうか。
ちょっとルーティングで出来る方法があるかが分からないので、教えてください
・web.phpでresourceをgroupの中に入れたい
・resourceのeditで(URLで)idを指定して表示させたい。例「customers/1/edit」
・しかしcontrollerのfunctionの引数にクラスを指定している(idから自動的にモデルがfindされるLaravelの仕様を利用)
<変更前>
[web.php]
Route::get('customers/change', 'Customer\CustomerController@change'); // こういうのがいっぱいあってresourceもろともgroupに入れたい
Route::resource('customers', 'Customer\CustomerController');
[CustomerController]
public function edit(Customer $customer){~~諸々の処理~~}
<こうしたい>
[web.php]
Route::group(['prefix' => 'customers', 'as' => 'customers.'], function () {
Route::get('change', 'Customer\CustomerController@change');
Route::resource('/', 'Customer\CustomerController');
}
[CustomerController]
public function edit(Customer $customer){~~諸々の処理~~}
ですが、後者だとURL「customers/1/edit」となったとき、not foundになります。
「customers」や「customers/create」等は正常に表示されます。
php artisan route:listでは
「customers/{customer}/edit」が「customers/{}/edit」になってしまいます。
groupの外にresourceの記述を出せば解決するのですが、
何かありそうなので、もし知っていたら教えてもらえますでしょうか。
400nobodyさん
2023/03/13(月) 11:55:55.29ID:??? 以下ChatGPTの回答。idをcustomerにしたら(cotrollerも変更なしで)OKでした。
問題の原因は、Route::resource で指定されたルーティングパラメーター名が customer であるためです。
Laravel は、Route::resource で自動的にルーティングパラメーターを id に設定します。
したがって、ルーティングパラメーター名を id に変更すれば、期待通りの動作が可能になります。
以下は、修正したコードです。
Route::group(['prefix' => 'customers', 'as' => 'customers.'], function () {
Route::get('change', 'Customer\CustomerController@change');
Route::resource('/', 'Customer\CustomerController')->parameters(['' => 'id']);
});
[CustomerController]
public function edit(Customer $id){~~諸々の処理~~}
Route::resource の第二引数に parameters メソッドを使用して、ルーティングパラメーター名を id に変更します。
そして、edit メソッドの引数も $id に変更します。
これで、URL customers/1/edit での編集ページへのアクセスが可能になります。
問題の原因は、Route::resource で指定されたルーティングパラメーター名が customer であるためです。
Laravel は、Route::resource で自動的にルーティングパラメーターを id に設定します。
したがって、ルーティングパラメーター名を id に変更すれば、期待通りの動作が可能になります。
以下は、修正したコードです。
Route::group(['prefix' => 'customers', 'as' => 'customers.'], function () {
Route::get('change', 'Customer\CustomerController@change');
Route::resource('/', 'Customer\CustomerController')->parameters(['' => 'id']);
});
[CustomerController]
public function edit(Customer $id){~~諸々の処理~~}
Route::resource の第二引数に parameters メソッドを使用して、ルーティングパラメーター名を id に変更します。
そして、edit メソッドの引数も $id に変更します。
これで、URL customers/1/edit での編集ページへのアクセスが可能になります。
401nobodyさん
2023/03/13(月) 14:12:38.36ID:??? 長いからChatGPTに要約させてくれるか
402nobodyさん
2023/03/13(月) 16:04:12.97ID:??? 「絶対にガンダムに例えて要約しろ」って言ったのに例えてくれなかったです。
しかも微妙にズレてる気はしなくもない。
↓回答
質問者がLaravelでルーティングを設定する上で、group化されたresourceルートでidを指定してeditアクションを呼び出したいが、
URLにおいてidを指定するとnot foundになってしまうという問題が発生しています。
これは、ルーティングパラメーター名がcustomerであるために起こる問題であり、idに変更することで解決できます。
具体的には、Route::resourceの第二引数にparametersメソッドを使ってidを指定し、
editメソッドの引数も$idに変更する必要があります。
これにより、URL customers/1/edit での編集ページへのアクセスが可能になります。
しかも微妙にズレてる気はしなくもない。
↓回答
質問者がLaravelでルーティングを設定する上で、group化されたresourceルートでidを指定してeditアクションを呼び出したいが、
URLにおいてidを指定するとnot foundになってしまうという問題が発生しています。
これは、ルーティングパラメーター名がcustomerであるために起こる問題であり、idに変更することで解決できます。
具体的には、Route::resourceの第二引数にparametersメソッドを使ってidを指定し、
editメソッドの引数も$idに変更する必要があります。
これにより、URL customers/1/edit での編集ページへのアクセスが可能になります。
404nobodyさん
2023/03/21(火) 00:16:26.53ID:??? GPTの登場でweb屋で食ってたのもいよいよおしまいか
プログラマ続けても安い扱い受けるだけだから別の職に就くか
プログラマ続けても安い扱い受けるだけだから別の職に就くか
405nobodyさん
2023/03/21(火) 09:12:15.53ID:??? どうぞご自由になさってください
406nobodyさん
2023/03/21(火) 10:15:34.81ID:??? 今までWEB屋で食ってた人の単価
chatGPTを使いこなしてWEB屋と同じレベルのものを生成する人の単価
前者のほうが圧倒的に安いからまだ大丈夫
chatGPTを使いこなしてWEB屋と同じレベルのものを生成する人の単価
前者のほうが圧倒的に安いからまだ大丈夫
407nobodyさん
2023/03/21(火) 10:31:18.76ID:??? 「ChatGPT使っていいから単価1/10でやって」
「ChatGPT使っていいから今日中におねがい」
「ChatGPT使っていいから検収やっといて」
「ChatGPT使っていいから今日中におねがい」
「ChatGPT使っていいから検収やっといて」
408nobodyさん
2023/03/21(火) 10:34:13.72ID:??? 「ChatGPTが正しいかどうかをテストする要員を追加したく」
409nobodyさん
2023/03/21(火) 10:42:15.68ID:??? で、不具合が出たとき、ChatGPTのせいだからしかたないね〜とはならず、
担当者のせいになる
担当者のせいになる
410nobodyさん
2023/03/21(火) 11:19:41.05ID:??? ChatGPTが1から10までやってくれるわけじゃないのに
411nobodyさん
2023/03/21(火) 11:58:36.70ID:??? 今はまだ結構間違ってるからねえ
でもそのうちフレームワーク自体がそれらを利用するようになるかもね
いまのartisanコマンドが進化するイメージ
でもそのうちフレームワーク自体がそれらを利用するようになるかもね
いまのartisanコマンドが進化するイメージ
412nobodyさん
2023/03/21(火) 12:38:20.84ID:??? ちゃんと要件を欠けば、コードが生成されるみたいな
でも、アホな蔵相手だと要件がいつまで経っても決まらないし、二転三転する
から、永遠にリリースできないのは今と同じかも
でも、アホな蔵相手だと要件がいつまで経っても決まらないし、二転三転する
から、永遠にリリースできないのは今と同じかも
413nobodyさん
2023/03/22(水) 00:46:13.10ID:??? windows環境で
laravelをxamppで実行できる環境作ったが当初動かなかった
composerをインストールし直したりした
結論はhtdocsの中に作れって事だった
しかし今度はzip展開できないとエラーが出たので
検索してphp.ini内のextension zipのコメントアウトを外して読めるようにしろとあったので
直したらまあうまく行った、らしい
とこんな出来の悪い自分でも出来るっぽいので
ChatGPTならもっとサクサク作るのか
laravelをxamppで実行できる環境作ったが当初動かなかった
composerをインストールし直したりした
結論はhtdocsの中に作れって事だった
しかし今度はzip展開できないとエラーが出たので
検索してphp.ini内のextension zipのコメントアウトを外して読めるようにしろとあったので
直したらまあうまく行った、らしい
とこんな出来の悪い自分でも出来るっぽいので
ChatGPTならもっとサクサク作るのか
414nobodyさん
2023/03/22(水) 01:44:20.35ID:??? XAMPPという初手からして間違ってるからなぁ
AI云々以前じゃね?
AI云々以前じゃね?
415nobodyさん
2023/03/22(水) 07:50:06.06ID:??? xamppなんてまだ使ってる人いたのか
416nobodyさん
2023/03/22(水) 08:08:04.46ID:??? Udemyとかのコースはxammpだからむしろ多いんじゃないか
417nobodyさん
2023/03/22(水) 12:13:54.04ID:??? そうなるとゼロからLaravelだけ学ぶ感じか
短期的には仕事を貰えるかもしれないが基盤技術を学ばないなら技術者としての寿命は短そうだな
短期的には仕事を貰えるかもしれないが基盤技術を学ばないなら技術者としての寿命は短そうだな
418nobodyさん
2023/03/22(水) 12:23:53.76ID:??? 公式ドキュメントをChatGPTに学習させればLaravelの開発できるかもね
419nobodyさん
2023/03/22(水) 12:24:57.09ID:??? それくらいならもうやってくれるぞ
420nobodyさん
2023/03/22(水) 16:05:31.67ID:??? Windowsの人はせめてWSL2は触れないと厳しかろう
仕事でxamppってフレーズが口から出てくる人いたら、
それはもう危険よね
仕事でxamppってフレーズが口から出てくる人いたら、
それはもう危険よね
421nobodyさん
2023/03/22(水) 20:50:39.02ID:??? 今日発売のLaravel10の本買った
そこでもSail説明してたから、これを機会にXamppは卒業するわ
そこでもSail説明してたから、これを機会にXamppは卒業するわ
422nobodyさん
2023/03/23(木) 11:18:48.83ID:??? ちんちん!シュッシュッ!シュッ!!
423nobodyさん
2023/03/31(金) 16:22:59.50ID:??? 今まで6使ってて10の勉強してるんだが、あまり変わらないんだな
強いて言えばBladeコンポーネントぐらいか
これ使わなくてもビューは作れるし、少しずつ移行できそうだ
強いて言えばBladeコンポーネントぐらいか
これ使わなくてもビューは作れるし、少しずつ移行できそうだ
424nobodyさん
2023/03/31(金) 16:34:08.60ID:??? Laravelってfulljoin無いの?
探しても見つからない…
誰か助けて…
探しても見つからない…
誰か助けて…
425nobodyさん
2023/04/02(日) 00:10:55.99ID:??? 分からんなら生SQL投げればええやん
426nobodyさん
2023/04/02(日) 19:05:28.53ID:i1/+p30I bingに
「aravel breezeに2段階認証を追加する方法を詳細に説明せよ。」
と言ったら、
Laravel Breezeには2段階認証機能はついていないようです1。
しかし、Laravel Jetstreamをインストールすると、
ログイン、新規登録、メール検証、2段階認証、セッション管理、
APIサポート(Laravel Sanctum)、チーム管理などが提供されます2。
Laravel Jetstreamの導入方法は以下のQiitaの記事を参考にしてください2。
詳細情報:
1. bing.com
2. qiita.com
3. blog.capilano-fw.com
4. qiita.com
5. reffect.co.jp
6. prograshi.com
7. biz.addisteria.com
8. biz.addisteria.com
9. qiita.com
10. bing.com
11. webopixel.net
+8 その他
2段階認証するためには「Laravel Jetstream」をインストールするのが無難ですか?
「aravel breezeに2段階認証を追加する方法を詳細に説明せよ。」
と言ったら、
Laravel Breezeには2段階認証機能はついていないようです1。
しかし、Laravel Jetstreamをインストールすると、
ログイン、新規登録、メール検証、2段階認証、セッション管理、
APIサポート(Laravel Sanctum)、チーム管理などが提供されます2。
Laravel Jetstreamの導入方法は以下のQiitaの記事を参考にしてください2。
詳細情報:
1. bing.com
2. qiita.com
3. blog.capilano-fw.com
4. qiita.com
5. reffect.co.jp
6. prograshi.com
7. biz.addisteria.com
8. biz.addisteria.com
9. qiita.com
10. bing.com
11. webopixel.net
+8 その他
2段階認証するためには「Laravel Jetstream」をインストールするのが無難ですか?
427nobodyさん
2023/04/02(日) 19:12:52.41ID:??? 環境作って要件満たすか検証すりゃいいじゃん
嫌なら自前で作ればいい
嫌なら自前で作ればいい
428nobodyさん
2023/04/02(日) 20:10:46.01ID:??? AIは結構嘘つくから自分で学ぶのが一番だよ
429nobodyさん
2023/04/02(日) 23:04:14.10ID:??? composerのパッケージ検索で二段階認証ぽいのは結構あるけど
要件に合ってなきゃ意味無いしね
Google認証システムを使う奴なんかはググレば直ぐ見つかるし
SMSでパス送る奴よりは作りやすそう
要件に合ってなきゃ意味無いしね
Google認証システムを使う奴なんかはググレば直ぐ見つかるし
SMSでパス送る奴よりは作りやすそう
430nobodyさん
2023/04/02(日) 23:49:10.20ID:??? sailってphpとcomposerがホストマシンに無いと動かないポンコツ仕様はなんとかならんのか
431nobodyさん
2023/04/03(月) 00:06:33.00ID:??? sail、バージョン指定できないのが辛い
常に最新版で開発したい人って多くないだろ
常に最新版で開発したい人って多くないだろ
432nobodyさん
2023/04/03(月) 16:22:19.65ID:??? ぴえん🥺
433nobodyさん
2023/04/04(火) 06:58:57.66ID:??? ちんちんシュッシュッ!!シュッ!
434nobodyさん
2023/04/06(木) 23:27:15.15ID:??? 10で編集・更新について教えてください。
$post = Post::find(1);
$post->name = $request->name;
$post->address = $request->address;
$post->comment = $request->comment;
$post->save();
こんな感じで書けば更新はされるのですが、
更新したいカラムを全て書かなければいけないのでしょうか?
カラム数が多いと手間ですが、省略できる書き方があれば教えてください。
$post = Post::find(1);
$post->name = $request->name;
$post->address = $request->address;
$post->comment = $request->comment;
$post->save();
こんな感じで書けば更新はされるのですが、
更新したいカラムを全て書かなければいけないのでしょうか?
カラム数が多いと手間ですが、省略できる書き方があれば教えてください。
435nobodyさん
2023/04/07(金) 02:19:17.92ID:??? ぺたんこおっぱい
ぽっこりおなか
つるつるわれめ
ぽっこりおなか
つるつるわれめ
436nobodyさん
2023/04/07(金) 03:48:12.04ID:??? >>434
モデル側でfillable設定してから
$post->update($request->all());
これでできるけど
フォームリクエスト使ってこうした方が良い
$post->update($request->validated());
モデル側でfillable設定してから
$post->update($request->all());
これでできるけど
フォームリクエスト使ってこうした方が良い
$post->update($request->validated());
437nobodyさん
2023/04/07(金) 08:44:45.14ID:??? ありがとうございます。このやり方でできました。
$post = Post::find(1);
$post->fill($request->all())->save();
$post = Post::find(1);
$post->fill($request->all())->save();
438nobodyさん
2023/04/07(金) 16:24:13.13ID:??? fillable設定ってどれだけカラム数があってもするべきですか?
439nobodyさん
2023/04/07(金) 18:12:11.12ID:??? >>438
fillableがなぜ存在するかを理解してるなら
100カラムだろうが1000カラムだろうが必要ならするべきって結論に至るはずよ
他の方法でguardedに空配列って手もあるけどお勧めしない
> すべての属性を一括割り当て可能にしたい場合は、モデルの$guardedプロパティを空の配列として定義します。
> モデルの保護を解除する場合は、Eloquentのfill、create、およびupdateメソッドに渡たす配列へいちいち特別な注意を払う必要があります。
fillableがなぜ存在するかを理解してるなら
100カラムだろうが1000カラムだろうが必要ならするべきって結論に至るはずよ
他の方法でguardedに空配列って手もあるけどお勧めしない
> すべての属性を一括割り当て可能にしたい場合は、モデルの$guardedプロパティを空の配列として定義します。
> モデルの保護を解除する場合は、Eloquentのfill、create、およびupdateメソッドに渡たす配列へいちいち特別な注意を払う必要があります。
440nobodyさん
2023/04/07(金) 20:59:50.00ID:??? guardedにidだけ指定するのはよくするけど
441nobodyさん
2023/04/07(金) 22:22:37.81ID:??? 皆さんエディタって何使ってます?
442nobodyさん
2023/04/07(金) 22:24:26.57ID:??? そらVSCodeよ
443nobodyさん
2023/04/07(金) 22:29:20.31ID:??? phpstorm勢は少ないのか・・・
444nobodyさん
2023/04/08(土) 02:59:28.50ID:??? 昔は使ってたけど、今となっては…
445nobodyさん
2023/04/08(土) 16:55:18.30ID:??? Laravelに、CakePHPでいうCounterCacheのような機能ってありますかね?
関連するテーブルが追加されたらカウントアップするみたいな
調べても単純なカウントアップはあるのですが、
自動カウントはなさそうなので困っています。
関連するテーブルが追加されたらカウントアップするみたいな
調べても単純なカウントアップはあるのですが、
自動カウントはなさそうなので困っています。
447nobodyさん
2023/04/09(日) 12:06:15.20ID:??? >>446
オブザーバーで、save/update後に登録数をcountするようにします。
単純な方法ですが、既存のCounterCacheも同じような仕組みなので
このやり方がベターなんだと思います。
オブザーバーで、save/update後に登録数をcountするようにします。
単純な方法ですが、既存のCounterCacheも同じような仕組みなので
このやり方がベターなんだと思います。
448nobodyさん
2023/04/10(月) 12:32:43.55ID:??? phpstormって何でlaravelのサポート削除したの?
449nobodyさん
2023/04/10(月) 17:09:26.30ID:??? マイグレーションのintegerにZEROFILLを指定したい場合、どう書けばいいのでしょうか?
450nobodyさん
2023/04/10(月) 19:58:37.10ID:??? >>449
無理やりやればできるけど基本的にはやらない方がいい
理由はMySQLの機能なのでDBをpostgressとか他のストレージエンジンに変更した場合
マイグレーションでエラーになるかその機能が付与されない
実現する場合はモデルでその機能を実装する
無理やりやればできるけど基本的にはやらない方がいい
理由はMySQLの機能なのでDBをpostgressとか他のストレージエンジンに変更した場合
マイグレーションでエラーになるかその機能が付与されない
実現する場合はモデルでその機能を実装する
452nobodyさん
2023/04/11(火) 12:12:43.05ID:??? zerofillでググったらmysql8.0からintのzerofillが非推奨になってるみたいだね
453nobodyさん
2023/04/11(火) 12:33:45.57ID:??? 大体はアプリでやる方がキレイだしね
454nobodyさん
2023/04/11(火) 17:41:19.56ID:??? 例えば外部APIやローカルファイルがデータソースだった場合で、Modelの機能だけを使いたい場合ってどうしてます?
使いたいのはキャスタ、アクセサ、ミューテタ、状態管理辺りの機能
良い方法が無くて自作したんだけどベストプラクティスがあればそっちに変えたいんです
使いたいのはキャスタ、アクセサ、ミューテタ、状態管理辺りの機能
良い方法が無くて自作したんだけどベストプラクティスがあればそっちに変えたいんです
455nobodyさん
2023/04/11(火) 18:25:48.79ID:??? それはLaravelのいうところのModelにはならん気がするけど、それをどこに置くかってこと?
456nobodyさん
2023/04/11(火) 18:38:57.42ID:??? 機能としてはDTOが一番近しいんだけど
Modelと同じ使用感でattributes、fillable、hiddenとか設定できたり
既に資産として存在するカスタムキャスタを使ったりしたい
Modelと同じ使用感でattributes、fillable、hiddenとか設定できたり
既に資産として存在するカスタムキャスタを使ったりしたい
457nobodyさん
2023/04/14(金) 01:35:30.50ID:O955HWXC 社内データを元に原価予測等の傾向分析を含むWEBサイトを開発するとしたら
データ分析部分はPythonでやらせるとして、
WEBはPHPかLaravelで分析ロジックはexe化したpythonプログラムをPHPのexec関数なんかで呼び出すか、
またはWEBをDjangoで分析ロジックも含めてコーディングするか、
あたりの2案その他を考えていますがどっちが良いか悩みます
開発やメンテ容易性、レスポンスなんかで考えるとどれになるのかなと
AI分析を絡めたWEBサイトの案件は多くなりそうですし、フリーのフレームワークで安価に構築したい要求もありますしね
データ分析部分はPythonでやらせるとして、
WEBはPHPかLaravelで分析ロジックはexe化したpythonプログラムをPHPのexec関数なんかで呼び出すか、
またはWEBをDjangoで分析ロジックも含めてコーディングするか、
あたりの2案その他を考えていますがどっちが良いか悩みます
開発やメンテ容易性、レスポンスなんかで考えるとどれになるのかなと
AI分析を絡めたWEBサイトの案件は多くなりそうですし、フリーのフレームワークで安価に構築したい要求もありますしね
458nobodyさん
2023/04/14(金) 01:38:40.97ID:??? ちんちん!シユシュッシュッ!
459nobodyさん
2023/04/14(金) 07:48:46.99ID:??? データ分析時間がどのくらいか知らないけど、時間かかるようならバッチ処理したデータ分析結果をWEBで見るやり方かなあ
460nobodyさん
2023/04/14(金) 08:48:59.56ID:??? フォームを検索するときに、コントローラで
$post = Post::query();
if ($request->query('name')) {
$post->where('name', $request->query('name'));
}
$result = $post->get();
みたいな書き方をしているのですが、
フォームの項目が増えるほどIFも増えて冗長化します。
良いライブラリとかコンポーザのパッケージはないでしょうか?
$post = Post::query();
if ($request->query('name')) {
$post->where('name', $request->query('name'));
}
$result = $post->get();
みたいな書き方をしているのですが、
フォームの項目が増えるほどIFも増えて冗長化します。
良いライブラリとかコンポーザのパッケージはないでしょうか?
461nobodyさん
2023/04/14(金) 12:57:11.00ID:??? >>460
一番雑で簡単な返答はFormRequestでバリデーション入れて
Post::query()->where($request->validated())->get()
なんだけどこれは実践だとクソの役にも立たないのでやっちゃダメ
自分の実装を簡単に書くと例えば下記の方法
ModelにScope作る
public function scopeSearch(Builder $builder,array $params ):Builder
{
$builder = $this->scopeSearchName($builder,data_get($params,'name'));
return $builder ;
}
public function scopeSearchName(Builder $builder, $name ):Builder
{
if( blank($name) ) {
return $builder ;
}
return $builder->where('name',$name ) ;
}
コントローラーで呼び出す
Post::search($request->validated())->get()
個別に使うなら
Post::searchName($request->query('name'))->get()
一番雑で簡単な返答はFormRequestでバリデーション入れて
Post::query()->where($request->validated())->get()
なんだけどこれは実践だとクソの役にも立たないのでやっちゃダメ
自分の実装を簡単に書くと例えば下記の方法
ModelにScope作る
public function scopeSearch(Builder $builder,array $params ):Builder
{
$builder = $this->scopeSearchName($builder,data_get($params,'name'));
return $builder ;
}
public function scopeSearchName(Builder $builder, $name ):Builder
{
if( blank($name) ) {
return $builder ;
}
return $builder->where('name',$name ) ;
}
コントローラーで呼び出す
Post::search($request->validated())->get()
個別に使うなら
Post::searchName($request->query('name'))->get()
462nobodyさん
2023/04/14(金) 13:38:42.25ID:??? >>461
モデルごとにこれを書くなら、IFで書く場合と大差ないことないですか?
あと、$request->validated()ってバリデーション通すのはなぜですか?
検索でバリデーションをすると、requiredでひっかかりそうですが
モデルごとにこれを書くなら、IFで書く場合と大差ないことないですか?
あと、$request->validated()ってバリデーション通すのはなぜですか?
検索でバリデーションをすると、requiredでひっかかりそうですが
463nobodyさん
2023/04/14(金) 14:51:00.39ID:??? >>462
> モデルごとにこれを書くなら、IFで書く場合と大差ないことないですか?
「IFで書く場合」ではなく「コントローラーに書く場合」として回答すると
大差ないか?という事であればベストプラクティスとバッドプラクティスの差がある
コントローラは単一の責任だけを持たないといけないのでモデルの検索ロジックがコントローラーに書かれていることがおかしい
以下ChatGPTの回答
検索ロジックをコントローラに書いてしまうと、コントローラが複雑になり、保守性が低下する可能性があります。
以下に詳しく説明します。
1. コードの可読性が低下する
コントローラに検索ロジックを含めると、コントローラの役割が複雑になり、コントローラのメソッドが大きくなり、可読性が低下する可能性があります。
コントローラの役割が明確でなくなるため、コントローラの修正や保守が困難になる可能性があります。
2. テストが困難になる
コントローラに検索ロジックを含めると、コントローラのテストが困難になる可能性があります。
コントローラに含まれる検索ロジックは、外部の依存関係を持つ可能性があり、依存関係をモック化する必要があるため、テストコードが複雑になる可能性があります。
3. 再利用性が低下する
コントローラに検索ロジックを含めると、再利用性が低下する可能性があります。
コントローラは、Webアプリケーションの特定の機能を担当するために設計されており、その機能に特化した責任を持つように設計されるべきです。
検索ロジックがコントローラに含まれると、コントローラが特定の機能に依存してしまうため、他の機能で再利用することが困難になる可能性があります。
以上の理由から、検索ロジックをコントローラに含めず、別の場所に分離することをお勧めします。
例えば、リポジトリパターンを使用して、データベースからデータを検索する責任を持つクラスを作成し、コントローラからはそのクラスを呼び出すようにすることができます。
これにより、コントローラは単一の責任を持ち、コードの保守性が向上し、テストの容易性や再利用性が高まります。
> モデルごとにこれを書くなら、IFで書く場合と大差ないことないですか?
「IFで書く場合」ではなく「コントローラーに書く場合」として回答すると
大差ないか?という事であればベストプラクティスとバッドプラクティスの差がある
コントローラは単一の責任だけを持たないといけないのでモデルの検索ロジックがコントローラーに書かれていることがおかしい
以下ChatGPTの回答
検索ロジックをコントローラに書いてしまうと、コントローラが複雑になり、保守性が低下する可能性があります。
以下に詳しく説明します。
1. コードの可読性が低下する
コントローラに検索ロジックを含めると、コントローラの役割が複雑になり、コントローラのメソッドが大きくなり、可読性が低下する可能性があります。
コントローラの役割が明確でなくなるため、コントローラの修正や保守が困難になる可能性があります。
2. テストが困難になる
コントローラに検索ロジックを含めると、コントローラのテストが困難になる可能性があります。
コントローラに含まれる検索ロジックは、外部の依存関係を持つ可能性があり、依存関係をモック化する必要があるため、テストコードが複雑になる可能性があります。
3. 再利用性が低下する
コントローラに検索ロジックを含めると、再利用性が低下する可能性があります。
コントローラは、Webアプリケーションの特定の機能を担当するために設計されており、その機能に特化した責任を持つように設計されるべきです。
検索ロジックがコントローラに含まれると、コントローラが特定の機能に依存してしまうため、他の機能で再利用することが困難になる可能性があります。
以上の理由から、検索ロジックをコントローラに含めず、別の場所に分離することをお勧めします。
例えば、リポジトリパターンを使用して、データベースからデータを検索する責任を持つクラスを作成し、コントローラからはそのクラスを呼び出すようにすることができます。
これにより、コントローラは単一の責任を持ち、コードの保守性が向上し、テストの容易性や再利用性が高まります。
464nobodyさん
2023/04/14(金) 15:04:32.87ID:??? >>462
続き
> あと、$request->validated()ってバリデーション通すのはなぜですか?
入力値の操作ができるので入力値に関する責任をコントローラーから切り離せる
https://readouble.com/laravel/9.x/ja/validation.html#preparing-input-for-validation
要するに検索項目に入れたくないパラメータやら値を省くことができる
> 検索でバリデーションをすると、requiredでひっかかりそうですが
nullableを使えばよい
続き
> あと、$request->validated()ってバリデーション通すのはなぜですか?
入力値の操作ができるので入力値に関する責任をコントローラーから切り離せる
https://readouble.com/laravel/9.x/ja/validation.html#preparing-input-for-validation
要するに検索項目に入れたくないパラメータやら値を省くことができる
> 検索でバリデーションをすると、requiredでひっかかりそうですが
nullableを使えばよい
465nobodyさん
2023/04/14(金) 15:15:47.82ID:??? >>462
一応ChatGPTの回答
検索リクエストの値をバリデーションする理由は、以下のようなものがあります。
1. 検索クエリの安全性を確保するため
検索クエリに含まれる値が適切にバリデーションされていない場合、悪意のあるユーザーによってSQLインジェクション攻撃などのセキュリティ上の問題が引き起こされる可能性があります。
バリデーションを行うことで、入力された値が予想されるフォーマットに一致しているかどうかを確認することができ、攻撃を防ぐことができます。
2. 検索結果の品質を向上するため
検索クエリに含まれる値が適切にバリデーションされていない場合、意図しない検索結果が表示される可能性があります。
たとえば、数字のみを入力することが想定されているフィールドに文字列が入力された場合、検索結果に誤りが生じる可能性があります。
バリデーションを行うことで、検索クエリが適切に構成されているかどうかを確認することができ、正確な検索結果を得ることができます。
3. UXを向上するため
検索リクエストのバリデーションにより、ユーザーが誤ったクエリを送信してしまった場合にエラーメッセージを表示し、適切な入力を促すことができます。
これにより、ユーザーのUXが向上し、検索エラーを減らすことができます。
以上のような理由から、検索リクエストの値をバリデーションすることが重要となります。
一応ChatGPTの回答
検索リクエストの値をバリデーションする理由は、以下のようなものがあります。
1. 検索クエリの安全性を確保するため
検索クエリに含まれる値が適切にバリデーションされていない場合、悪意のあるユーザーによってSQLインジェクション攻撃などのセキュリティ上の問題が引き起こされる可能性があります。
バリデーションを行うことで、入力された値が予想されるフォーマットに一致しているかどうかを確認することができ、攻撃を防ぐことができます。
2. 検索結果の品質を向上するため
検索クエリに含まれる値が適切にバリデーションされていない場合、意図しない検索結果が表示される可能性があります。
たとえば、数字のみを入力することが想定されているフィールドに文字列が入力された場合、検索結果に誤りが生じる可能性があります。
バリデーションを行うことで、検索クエリが適切に構成されているかどうかを確認することができ、正確な検索結果を得ることができます。
3. UXを向上するため
検索リクエストのバリデーションにより、ユーザーが誤ったクエリを送信してしまった場合にエラーメッセージを表示し、適切な入力を促すことができます。
これにより、ユーザーのUXが向上し、検索エラーを減らすことができます。
以上のような理由から、検索リクエストの値をバリデーションすることが重要となります。
466460
2023/04/14(金) 16:32:57.48ID:??? 確かにコントローラに検索ロジックを書くと複雑になりますね。
管理画面用のコントローラと公開画面用のコントローラで
似たようなソースを書いてるので余計に無駄です。
検索バリデーションについては思うところもありますが、
とりあえずベストプラティクスに近づけたいので
出来る範囲で対応したいと思います。
管理画面用のコントローラと公開画面用のコントローラで
似たようなソースを書いてるので余計に無駄です。
検索バリデーションについては思うところもありますが、
とりあえずベストプラティクスに近づけたいので
出来る範囲で対応したいと思います。
467460
2023/04/14(金) 17:27:24.43ID:??? すみません、スコープ作った場合でも、
public function scopeSearchName($query, $name){
if ($name !== null) {
return $query->where('name', $name);
}
}
みたいにIFで判定するのは仕方ないんですかね?
また、検索項目が複数ある場合、
User::searhName($request->query('name'))->searhType($request->query('type'))->searhBirth($request->query('birth'))
みたいにどんどん長くなるのも仕方ないんですかね?
public function scopeSearchName($query, $name){
if ($name !== null) {
return $query->where('name', $name);
}
}
みたいにIFで判定するのは仕方ないんですかね?
また、検索項目が複数ある場合、
User::searhName($request->query('name'))->searhType($request->query('type'))->searhBirth($request->query('birth'))
みたいにどんどん長くなるのも仕方ないんですかね?
468nobodyさん
2023/04/14(金) 17:53:45.98ID:??? >>467
> IFで判定するのは仕方ないんですかね?
これって値が空の場合検索条件追加しないでクエリビルダを戻すって事やってるから
値の有無関係なく検索する必要があるなら(nullを検索したい場合には)条件分岐しなくとも良い
というより何をどう検索したいかによってScope内の処理は変わるから何とも言えない
> 検索項目が複数ある場合
> どんどん長くなるのも仕方ないんですかね?
コントローラー内からシンプルに呼び出せる様にscopeSearchを書いたつもりなんだけど
public function scopeSearch(Builder $builder,array $params ):Builder
{
$builder = $this->scopeSearchName($builder,data_get($params,'name'));
$builder = $this->scopeSearchType($builder,data_get($params,'type'));
$builder = $this->scopeSearchBirth($builder,data_get($params,'birth'));
return $builder ;
}
> IFで判定するのは仕方ないんですかね?
これって値が空の場合検索条件追加しないでクエリビルダを戻すって事やってるから
値の有無関係なく検索する必要があるなら(nullを検索したい場合には)条件分岐しなくとも良い
というより何をどう検索したいかによってScope内の処理は変わるから何とも言えない
> 検索項目が複数ある場合
> どんどん長くなるのも仕方ないんですかね?
コントローラー内からシンプルに呼び出せる様にscopeSearchを書いたつもりなんだけど
public function scopeSearch(Builder $builder,array $params ):Builder
{
$builder = $this->scopeSearchName($builder,data_get($params,'name'));
$builder = $this->scopeSearchType($builder,data_get($params,'type'));
$builder = $this->scopeSearchBirth($builder,data_get($params,'birth'));
return $builder ;
}
469460
2023/04/14(金) 17:58:44.88ID:??? とりあえずスコープの勉強が足りないことはわかりました
色々と試行錯誤してやってみます。ありがとうございました
色々と試行錯誤してやってみます。ありがとうございました
470nobodyさん
2023/04/16(日) 02:39:49.01ID:??? クエリビルダでwhen()があるので
if()で条件判定して追加するよりはスマートな気がする
データが入ってないと検索条件が増えないようなものには俺の場合はwhen()で対処している
良くある検索条件が複数あって未入力はパスのようなやつね
if()で条件判定して追加するよりはスマートな気がする
データが入ってないと検索条件が増えないようなものには俺の場合はwhen()で対処している
良くある検索条件が複数あって未入力はパスのようなやつね
471460
2023/04/16(日) 09:50:36.55ID:???472nobodyさん
2023/04/21(金) 18:06:14.14ID:eZ0hTZy/ APIサーバーとしてLaravelを使用してるけど、Laravel Sanctum良いね
認証処理が一瞬で構築できる
認証処理が一瞬で構築できる
473nobodyさん
2023/04/23(日) 18:55:40.49ID:??? オブジェクトのことよくわかってなかったんだが、
$user = User::find(1);
$old_user = $user;
$user->update($request->all());
ってすると、$old_userの中身が更新済みの値に変わるんだな。
$user = User::find(1);
$old_user = $user;
$user->update($request->all());
ってすると、$old_userの中身が更新済みの値に変わるんだな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ドナルド・トランプとジェフリー・エプスタインは「13歳の少女の処女をどちらが奪うかで口論」=米国下院報告書 [Hitzeschleier★]
- 【外食】500円だった天丼が730円...「てんや」深刻な客離れ 「庶民の味方」も値上げ続いて2か月連続で客数約1割減 [ぐれ★]
- 【ジュンク堂】「時給1280円・週5勤務」のアルバイト求人「奴隷並み待遇・やりがい搾取」 手取り約16万円では書店員なのに本を買えない [ぐれ★]
- サンリオ 日本でも『VIVANT』とのコラボ中止を発表 「企業理念にそぐわない表現が…」と説明 [冬月記者★]
- 第三次世界大戦?AI攻撃で社会麻痺?11/2に政府が全国民に最低3日分の備蓄を緊急要請★3 [♪♪♪★]
- スズキ、ホンダ・日産抜き2番手に 26年度上半期の自動車世界販売 [首都圏の虎★]
- 【高市悲報】八田與一の新たな写真、公開される [509448172]
- 経験上クズが多かった名字wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww [632596506]
- 【高市悲報】「男が好きなんだろ?」と同僚に言ったり後ろから抱きついたりなどした教師をセクハラで停職処分 [165981677]
- 【悲報】サンリオジャパン、『VIVANT』本国の中国に続いて日本でもコラボ中止決定!中国ヘイトにブチギレが止まらず [591180291]
- 「天丼てんや」がワンコイン→730円に値上げした結果www [303493227]
- 日本人「たった2000億円で米国が味方についてくれるなんて安すぎる」 [834922174]