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

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

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

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

Laravel

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1635閲覧

laravelで削除機能をつけたい。

yoheiiii

総合スコア91

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

Laravel

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/10/25 05:53

編集2020/10/30 09:25

環境:Windows10,XAMPP,HeidiSQL
データベース:テーブル名:shyouhin カラム:id,name,price,gazou,updated_at,created_at

laravelで削除機能をつけたい。
ラジオボタンで選択し削除を押すと消えるようにしたい。
現状、押しても何もおこりません。(エラーなし)

イメージ説明

【ルート】

<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/shop', 'shopController@index'); Route::post('/shop/create','shopController@create'); Route::get('/shop/list','shopController@list'); Route::get('/top','shopController@top'); Route::get('/shyouhintop','shopController@shyouhintop'); Route::post('/shyouhin','shopController@shyouhin'); Route::get('/shyouhin/list','shopController@shyouhinlist'); Route::post('/shop/delete','shopController@delete');

【コントローラ】

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\staff; use App\shyouhin; use Validator; use App\Http\Requests\ShopRequest; use Illuminate\Support\Facades\DB; class shopController extends Controller { public function index() { return view('staff_add',['msg' => 'フォームを入力してください。']); } public function create(Request $request) { $data =new staff(); $data->name = $request->name; $data->password = $request->pass; $data->save(); $validate_rule = [ 'name' => 'required', 'pass' => 'required', ]; $this->validate($request,$validate_rule); return view('staff_add',['msg' => '登録完了致しました。']); } public function list(Request $request) { $items =DB::select('select * from staffs'); return view('staff_list',['items' => $items]); } public function top() { return view('top'); } public function shyouhintop() { return view('shyouhin_add',['msg' => '商品を入力してください。']); } public function shyouhin(Request $request) { $data = new shyouhin(); $data->name = $request->name; $data->price = $request->price; $data->gazou = $request->gazou; $data->save(); $validate_rule = [ 'name' => 'required', 'price' => 'required', ]; $this->validate($request,$validate_rule); return view('shyouhin_add',['msg' => '登録完了致しました。']); } public function shyouhinlist(Request $request) { $items =DB::select('select * from shyouhin'); return view('shyouhin_list',['items' => $items]); } public function delete(Request $request) { $data = shyouhin::find($request->id); $data->delete(); return redirect('/shyouhin/list'); } }

【ブレード】

<!DOCtYPE html> <html> <head> <meta charset="UTF-8"> <title>ショップ</title> </head> <body> 商品一覧<br /> <br /> <table border="2"> <tr> <th>商品</th> <th>価格</th> <th>画像</th> </tr> <form method="post" action="/shop/delete"> @csrf <tr> <td> @foreach($items as $item) <input type="radio" name="id" value="id"> {{$item->name}}<br /> @endforeach </td> <td> @foreach($items as $item) {{$item->price}}<br /> @endforeach </td> <td> @foreach($items as $item) <img src="{{$item->gazou}}"><br /> @endforeach </td> </tr> </table> <br /> <input type = "submit" value="削除"> </form> <button onclick="history.back()">戻る</button> </body> </html>

$data->delete();の上に
dd($data);を入れデバックしたところ
nullが返ってきます。
ラジオボタンで選択した情報を持ってくる方法がわかりません。
ご教授お願いいたします。

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

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

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

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

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

m.ts10806

2020/10/25 23:58

できるところまでデバッグしてください。 クラスの命名とかHTMLとかおかしいと思えるところはありますが、 せめて「どこまで処理が通っているか」「想定の値は渡っているか」くらいまでは自身で確認してください。
yoheiiii

2020/10/26 01:00

デバッグ致しました。処理は通っていますが、削除前の$dataが空の状態です。 ブレードの<input type="radio" name="id" value="id">でvalueにラジオボタンで選んだものを 設定するのだと思いますが、調べても参考になるものにたどりつけませんでした。
m.ts10806

2020/10/26 01:05

では、shyouhinクラスの定義も提示してください。 あとできればLaravelのバージョンもですね。 モデルの扱い方が合ってないようにも思います。
yoheiiii

2020/10/26 02:02 編集

【shyouhinクラス】 <?php namespace App; use Illuminate\Database\Eloquent\Model; class shyouhin extends Model { protected $table ="shyouhin"; } 【Laravelのバージョン】 7.28.4 以上、宜しくお願いいたします。 申し訳ございません。 shyouhinの定義とはどうゆうことでしょうか? デバッグに関しては、 public function delete(Request $request) { $data = new shyouhin(); $data->id = $request->id; dd($data); $data->delete(); return redirect('/shyouhin/list');   } 上記のように行い、table:'shyouhin'など返ってきているので 出来ていると考えているのですが・・・
m.ts10806

2020/10/26 01:34

質問は編集できますので追記願います。 あとshyouhinの定義も必要かと思います。 ちなみに$data = new shyouhin(); のときに$dataは正しくshyouhinクラスのインスタンス出来てるのでしょうか?(デバッグでどう確認したかも知りたい)
guest

回答2

0

<input type="radio" name="id" value="id"> ↓ <input type="radio" name="id" value="{{$item->id}}">

上記修正し、ラジオボタンで選択した値を取ることが出来ました。

投稿2020/11/02 02:44

yoheiiii

総合スコア91

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

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

0

ベストアンサー

m.ts10806さんのおっしゃる通り、モデルの扱い方が合っていないかと。
元の書き方だと空のモデルにidを詰めてるだけかと思います。(対象データ自体を取得出来ていないような)

$data = new shyouhin(); $data->id = $request->id; $data->delete(); ↓ $data = shyouhin::find($request->id); $data->delete();

参考ページ:Laravel 6.x Eloquent:利用の開始の「モデル削除」部分

投稿2020/10/26 08:58

meshi_s

総合スコア276

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

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

yoheiiii

2020/10/27 13:04

ご教授ありがとうございます。 Call to a member function delete() on null のエラーとなります。ラジオボタンフォームのvalueが問題なのでしょうか?
meshi_s

2020/10/28 00:48

> ラジオボタンフォームのvalueが問題なのでしょうか? 表示された画面のvalueを確認いただければ分かるかと思います。 ``` @foreach($items as $item) <input type="radio" name="id" value="id"> {{$item->name}}<br /> @endforeach ``` となっているので、valueに「id」という文字列が渡ってきてるのではないでしょうか。
yoheiiii

2020/10/30 09:42

ラジオボタンで選択したデータを持ってくるやり方がわかりません。 色々調べましたが、求めているものにたどりついておりません。 ご教授頂ければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問