質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4290閲覧

チェックボックスで複数選択した行の一括更新(論理削除)

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/06/16 09:05

編集2021/06/16 11:35

イベントに申し込んだ人のリストを表示するページをlaravelで作成しています。
申し込み情報を複数まとめて論理削除するため、チェックボックスを使用しようと思っています。
データベースから申し込み情報を取ってきてテーブル表示、チェックボックスにチェックし、削除ボタンを押したら論理削除、という風にしたいです。
他の似たような質問や記事は拝見しましたが、うまく落とし込めませんでした。
論理削除の賛否は承知の上ですが、仕様上用いています。
php、laravelは触り始めてまだ2週間ほどの浅学者なため、知識が足りないところが多々ありますが、ご教授いただければ幸いです。

発生している問題・エラーメッセージ

削除ボタンを押しても論理削除が出来ていません。
おそらく配列がうまく取得できていないのだと思います。

該当のソースコード

html

1(テーブル部分のみ記述します) 2<tbody> 3 @foreach ($list as $row) 4 <tr> 5 <td id="delete"><input class="target" type="checkbox" name="delete[]" value="{{ $row->id }}"></td> 6 <td>{{ $row->event_no }}</td> 7 <td>{{ $row->name }}</td> 8 <td>{{ $row->email }}</td> 9 </tr> 10 @endforeach 11</tbody> 12 13//フォーム送信 14<form method="POST" action="{{ route('user.delete') }}" name="delete"> 15 @csrf 16 <input type="button"> 17</form>

Controller

1public function delete(Request $request) 2{ 3 //チェックボックスでチェックしたidを取得 4 $delete = array($request->input('delete')); 5 6 //チェックしたidで1件ずつ削除する 7 for($i=0; $i<count($delete); $i++){ 8 9 $this->service->delete($delete[$i]); 10 } 11 12return redirect(); 13}

Service

1public function delete($id) 2{ 3 関連テーブルの論理削除 4 DB::table('users') 5 ->where('id',$id) 6 ->update(['delete_flg' => 1]); 7}

usersテーブルは、idを一意キーとしています。
関係なさそうな部分は端折って記述しましたが、足りなければお教えいただければと思います。

###参考にしたサイト等
・チェックボックスの取得方法は以下を参考にしました。
https://it.becrazy.jp/article/laravel-request

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_app

2021/06/16 09:24

//チェックボックスでチェックしたidを取得 $delete = array($request->input('delete')); $this->service->{1件検索をするメソッド}($delete[$i]) Controllerの$deleteをdd()でデバッグしてみてください。 ここでは値は渡されているでしょうか? 「$this->service->{1件検索をするメソッド}($delete[$i])」は何の行でしょうか? 記入ミスでしょうか? こちらは大丈夫だとは思いますが、その後「for($i=0; $i<count($delete); $i++){」でループさせていますが、配列の添え字は0からの連番になっていますか? 添え字が飛び飛びの配列であれば、foreachを使ってループさせてください。
退会済みユーザー

退会済みユーザー

2021/06/16 09:34

回答いただきありがとうございます。 >>Controllerの$deleteをdd()でデバッグしてみてください。 ここでは値は渡されているでしょうか? 確認したところ渡せていませんでした。チェックボックスがうまく働いていないのでしょうか… >>「$this->service->{1件検索をするメソッド}($delete[$i])」は何の行でしょうか? 記入ミスでしょうか? 記入ミスです。どこからか紛れ込んでしまっていたようです…修正しました。ありがとうございます。
hiro_app

2021/06/16 09:40

画面の削除ボタン?を押下する チェックされた削除対象のIDがPOSTされる Controller deleteメソッドのRequestで受け取れる dd($delete); で受け取った内容が表示される ここまで出来てからがLaravelの論理削除処理が始まるので、受け取れていないならHTMLのFORMやPHP側のデータ受け取りに問題がありそうですね。 まずは、その辺りの調査 or 関係ありそうな箇所のソース追記をお願いします。
退会済みユーザー

退会済みユーザー

2021/06/16 09:50

そうですね…ご教授いただきありがとうございます。 削除に関係する部分は記述したものがすべてだと思います。浅学なために見落としている点があるかもしれませんが…。 チェックボックスの受け取りについて調査を進めてみます。
hiro_app

2021/06/16 10:08

ん?ん?ん?N?N?N? まさかこれのせいではないですよね・・・。 回答側に書いておきますが
guest

回答1

0

ベストアンサー

inputのあるtableを、form内に設置しないとpostしてくれません。
form内のものをpostするので

blade

1//フォーム送信 2<form method="POST" action="{{ route('user.delete') }}" name="delete"> 3 @csrf 4 5(テーブル部分のみ記述します) 6<tbody> 7 @foreach ($list as $row) 8 <tr> 9 <td id="delete"><input class="target" type="checkbox" name="delete[]" value="{{ $row->id }}"></td> 10 <td>{{ $row->event_no }}</td> 11 <td>{{ $row->name }}</td> 12 <td>{{ $row->email }}</td> 13 </tr> 14 @endforeach 15</tbody> 16 17 <input type="button"> 18</form>

投稿2021/06/16 10:09

hiro_app

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/16 10:50

1件の詳細表示画面のビューを流用していたのでその変更が出来ていなかったようです…! 初歩的なミスでお時間とらせてしまい申し訳ありません。 素早いレスポンスでいろいろご教授いただけてとてもうれしかったです。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問