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

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

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

dBASEは、Ashton Tate社が開発したデータベース管理システム (DBMS) です。初期のマイクロコンピュータ向けに開発。広く使用されていました。現在は、RAD環境を取り入れたVisual dBASEとして、米dBASE社が提供しています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

3回答

920閲覧

Laravel5 Eloquent delete操作やり方

syougosty

総合スコア27

dBASE

dBASEは、Ashton Tate社が開発したデータベース管理システム (DBMS) です。初期のマイクロコンピュータ向けに開発。広く使用されていました。現在は、RAD環境を取り入れたVisual dBASEとして、米dBASE社が提供しています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/11/15 11:25

編集2018/11/16 01:40

LaravelのEloquentでCRUDを実装しているのですか、delete操作をうまく実装できません。
自分がやろうとしている操作は、
0. DBに入ってるアイテムを一覧として複数表示
0. それぞれのアイテムについてる詳細ボタンを押すと詳細画面でアイテムの詳細を表示
0. 詳細画面にある削除ボタンを押すと確認のモーダルが表示される
0. モーダルの削除を押すとそのアイテムを消去
です。イメージ説明

詳細画面を表示させ、確認モーダルを表示させるところまではできました。

ちなみに詳細画面はこんな感じで表示させてます。

PHP

1//詳細ボタン 2<a href="/bicycleapp/home/details/{{$item->id}}" class="btn btn-light">詳細</a>

PHP

1//詳細ページ表示 2Route::get('bicycleapp/home/details/{id}',('ItemController@detailsView'));

PHP

1//詳細ページ表示アクション 2 public function detailsView($id){ 3 $items = Item::findOrFail($id); 4 return view ('details', ['items' => $items]);

モーダル部分

PHP

1<div class="modal fade" id="deleteModalCenter" tabindex="-1" role="dialog" aria-labelledby="deleteModalCenterTitle" aria-hidden="true"> 2 <div class="modal-dialog modal-dialog-centered" role="document"> 3 <div class="modal-content"> 4 <div class="modal-header"> 5 <h5 class="modal-title" id="deleteModalCenterTitle">確認</h5> 6 </div> 7 <div class="modal-body"> 8 <h2>本当に削除しますか?</h2> 9 </div> 10 <div class="modal-footer"> 11 <button type="button" class="btn btn-secondary" data-dismiss="modal">やめる</button> 12 <button type="submit" value="削除" method="post" class="btn btn-danger">削除する</button> 13 </div> 14 </div> 15 </div> 16 </div>

削除ボタンを押してもなにもならない

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

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

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

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

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

m.ts10806

2018/11/15 21:29

「うまくできません」だと何がどうできていないのか、起きている現象が分かりません。現状のコードも端折られている部分も多いですし、実際に起きている問題は何でしょうか。
TAMA000

2018/11/16 01:25

mts10806様がおっしゃっている通り、もう少し情報を出して欲しいのですが、特にViewの部分が気になります。モーダルにアイテムのIDが渡されていない可能性があると思ったからです。
syougosty

2018/11/16 01:40

モーダル部分を追加しました。
guest

回答3

0

自己解決

モーダルでの確認表示をやめて別画面で確認する処理にしました。
諦めました。

PHP

1//削除確認画面へ移動 2 public function delete($id){ 3 $items = Item::findOrFail($id); 4 return view ('delete', ['items' => $items]); 5 } 6 //delete処理 7 public function remove($id){ 8 $items = Item::findOrFail($id)->delete(); 9 return redirect('bicycleapp/home/deleteComplete'); 10 }

ルーティング

PHP

1Route::get('bicycleapp/home/delete/{id}',('ItemController@delete')); 2Route::post('bicycleapp/home/delete/{id}',('ItemController@remove')); 3Route::get('bicycleapp/home/deleteComplete', function () { 4 return view ('deleteComplete'); 5});

確認画面 delete.blade.php

PHP

1<body> 2 <form action="" method="post"> 3 {{ csrf_field() }} 4 <input type="hidden" name="id" value="{{$items->id}}"> 5 {{$items->name}}を本当に削除しますか? 6 <input type="submit" value="削除する" class="btn btn-danger"> 7 <a href="javascript:history.go(-1)">戻る</a> 8</body> 9

削除完了画面 deleteComplete.blade.php

PHP

1削除しました。 2 3<a href="javascript:history.go(-4)">HOME</a>

投稿2018/11/21 04:36

syougosty

総合スコア27

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

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

0

そのエラーは$request->idが渡されていないのでView側の問題ですね。
おそらくエラー画面の「POST_DATA」のidの部分が空白になっているかと思います。

今のやりかただと解決方法がわからないので、ちょっと変更点の多い解決法を提示させていただきます。

Route

1 Route::get('bicycleapp/home/details/{$item}', ('ItemController@detail')->name('item.detail'); 2 Route::post('bicycleapp/home/details/delete/{$item}',('ItemController@delete'))->name('item.delete'); 3 Route::get('bicycleapp/home/details/delete/complete',('ItemController@deleteComplete'))->name('item.delete.complete);
  • ルーティングを任意のnameで管理しています。route('~')でアクションを指定することができます。
  • URLに$itemを指定することで、コントローラでリクエストでidを渡すことなく$itemを取得することができます。

Controller

1//詳細ページ表示アクション 2 public function detailsView($id){ 3 $item = Item::findOrFail($id); 4 return view ('details', ['item' => $item]); 5 } 6 7// アイテム削除 8public function delete(Request $request, Item $item){ 9 $item->delete(); 10 redirect(route('item.delete.complete'); 11} 12 13// アイテム削除完了ページ 14public function deleteComplete() { 15 view('delete') 16}
  • deleteアクションの引数に$itemを追加したので、find($id)することなく$itemが使えます。

detail

1<body> 2<h2 class="title">{{$item->name}}</h2> 3<div class="weight">{{$item->weight}}g</div> 4<a href="{{$item->link}}">参照元</a> 5 6 7 8<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteModalCenter">削除</button> 9 10<!--削除確認モーダル--> 11<form action="{{ route('item.delete', $item)}}" method="POST"> 12 {{ csrf_field() }} 13 <div class="modal fade" id="deleteModalCenter" tabindex="-1" role="dialog" aria-labelledby="deleteModalCenterTitle" aria-hidden="true"> 14 <div class="modal-dialog modal-dialog-centered" role="document"> 15 <div class="modal-content"> 16 <div class="modal-header"> 17 <h5 class="modal-title" id="deleteModalCenterTitle">確認</h5> 18 </div> 19 <div class="modal-body"> 20 <h2>本当に削除しますか?</h2> 21 </div> 22 <div class="modal-footer"> 23 <button type="button" class="btn btn-secondary" data-dismiss="modal">やめる</button> 24 <input type="submit" value="削除" class="btn btn-danger"> 25 </div> 26 </div> 27 </div> 28 </div> 29</form> 30</body>

{{ route('item.delete', $item)}}"とすることで、URLの{$item}部分が渡されます。
これでidが定義されないエラーが消えるはずです。

もしかしたらdetailページに行くためのURLも設定し直す必要があるかもしれません。
このような大幅な変更ができそうであればやってみてください。

投稿2018/11/16 08:10

TAMA000

総合スコア39

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

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

0

モーダル部分がformタグの中に入っていないのではないでしょうか。

投稿2018/11/16 01:47

TAMA000

総合スコア39

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

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

syougosty

2018/11/16 01:55

途中でformタグのことには気づいたのですが、この処理の場合どうやってformタグを記述すればいいのか分かりませんでした。
TAMA000

2018/11/16 02:02

<form> <inputなど> <button 削除> // ここにモーダル </form> formタグの最後にそのままモーダルを入れてみてはどうでしょうか。
syougosty

2018/11/16 02:12

アイテムのidはどうやって渡せばいいのでしょうか?
TAMA000

2018/11/16 02:21

formタグの中にsubmitが入っていれば、IDを渡す必要はありません。 できなかった場合は、どのような動作になったか教えていただけますか?
syougosty

2018/11/16 03:41

<form action="javascript:history.back()" method="POST"> {{ csrf_field() }} <input type="hidden" name="id" value="{{$items->id}}"> <div class="modal fade" id="deleteModalCenter" tabindex="-1" role="dialog" aria-labelledby="deleteModalCenterTitle" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="deleteModalCenterTitle">確認</h5> </div> <div class="modal-body"> <h2>本当に削除しますか?</h2> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">やめる</button> <input type="submit" value="削除" class="btn btn-danger"> </div> </div> </div> </div> </form> ------------------------------------------------------------------------------------------------------------ コントローラ public function delete(Request $request){ Item::find($request->$id)->delete(); ------------------------------------------------------------------------------------------------------------ こんな感じで記述しています。 今のところ削除ボタンを押してもアイテムを削除することが出来ませんし、何かエラーが表示されるわけでもありません。
TAMA000

2018/11/16 03:52

formのactionにはdeleteメソッドに繋がるURLを入れてください。 submitボタンを押した時にactionに記載されているURLに遷移するようなイメージです。
syougosty

2018/11/16 04:36

「削除しました」とだけ表示されるdelete.blade.phpを作り、action="delete"にしました。 ルーティングを Route::post('bicycleapp/home/details/delete',('ItemController@delete')); として実行したら Undefined variable: id とエラーが表示されました。
TAMA000

2018/11/16 05:10

一度detailのviewとdeleteのviewを載せていただけますか?
syougosty

2018/11/16 05:17

detail <body> <h2 class="title">{{$items->name}}</h2> <div class="weight">{{$items->weight}}g</div> <a href="{{$items->link}}">参照元</a> <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteModalCenter">削除</button> <!--削除確認モーダル--> <form action="delete" method="POST"> {{ csrf_field() }} <input type="hidden" name="id" value="{{$items->id}}"> <div class="modal fade" id="deleteModalCenter" tabindex="-1" role="dialog" aria-labelledby="deleteModalCenterTitle" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="deleteModalCenterTitle">確認</h5> </div> <div class="modal-body"> <h2>本当に削除しますか?</h2> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">やめる</button> <input type="submit" value="削除" class="btn btn-danger"> </div> </div> </div> </div> </form> </body> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー delete <body> <h1>削除しました</h1> <a href="javascript:history.go(-2)">戻る</a> </body> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー お願いします
TAMA000

2018/11/16 05:31

ありがとうございます。 formタグのアクションがdeleteアクションに渡されるように設定できていないようです。 <form action="{{action('ItemController@delete')}}" method="POST">としてみてはどうでしょうか。 先ほど申し上げたdeleteメソッドに繋がるURLというのは、 Route::post('bicycleapp/home/details/delete',('ItemController@delete'));の部分のことなので、 <form action="{{ url('/bicycleapp/home/details/delete') }}" method="POST">という指定もできるかと思います。
syougosty

2018/11/16 05:53

<form action="{{action('ItemController@delete')}}" method="POST"> <form action="{{ url('/bicycleapp/home/details/delete') }}" method="POST"> とどちらも試しましたが、 public function delete(Request $request){ Item::find($request->$id)->delete(); } 部分で "Undefined variable: id とエラーがでてきます。 function deleteの部分の記述に問題があるのでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問