WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
EloquentORMでデータ削除(DELETE)

EloquentORMでデータ削除(DELETE)

このエントリーをはてなブックマークに追加

EloquentORMでデータを削除するには、インスタンスに対してdeleteメソッドを使用するだけです。データの更新みたいにsaveメソッドを使用する必要はありません。

ただ、逆に言えば、deleteメソッドだけで、データが削除されますので、削除に対しては、より慎重になる必要があります。※Laravelはこの辺も考慮して、ソフトデリートという機能が装備されています。

deleteメソッドで削除

一番簡単な、削除方法は、delete()メソッドを使用する方法です。モデルをインスタンス化し、deleteメソッドを実行するだけです。

(例)app/controllers/UserController.php

//GETで削除
 public function getDelete($id){
 $user=User::find($id);
 $user->delete();
 }
 //POSTで削除
 public function postDelete(){
 $user=User::find(Input::get('id'));
 $user->delete();
 }
  • 2-4行目:上記例では、ブラウザから、idを入力しただけで、削除することができます。たとえば、http://localhost/user/delete/1と入力すると、id番号1のユーザーを削除することが可能ですので、なるべく避けた方がいいでしょう。
  • 6-8行目:サイトのフォームからidを送信して受け取ったid番号のユーザーを削除します。削除に関しては、こちらの方が安全だと思います。※これに、Laravelに標準で装備されているcsrfフィルターを使用すればより安全にデータの削除ができます。

deleteメソッドで複数モデルの削除

(例2)app/controllers/UserController.php

public function postDelete(){
 $user=User::where('age','<',Input::get('age'))->delete();
 }
  • 上記例では、Userモデルのageプロパティの値がフォームから受け取ったageフィールドの値より小さい複数のモデルを同時に削除します。

destroyメソッドで削除

deleteメソッドよりも簡単にデータを削除することができるのが、destroyメソッドです。destroyメソッドは、引数にprimaryキーを指定することで、モデルのインスタンス化と削除を同時に行います。

(例)app/controllers/UserController.php

public function postDelete(){
 $user=User::destroy(Input::get('id'));
 }

destroyメソッドで複数モデルの削除

destroyメソッドの引数にidのリストや配列を指定することで、複数のモデルを同時に削除することができます。

※蛇足ですが、初心者用に複数のidをフォームから同時に送信して削除する方法を下記に記述しておきます。

(例)app/controllers/UserController.php

//削除ページを開く
 public function getDelete(){
 $users=User::all();
 return View::make('user/delete',compact('users'));
 }
 //受信したデータの削除
 public function postDelete(){
 $destroy=User::destroy(Input::get('user'));
 return Redirect::back();
 }

(例)app/views/user/delete.blade.php

<body>
 <h1>データの削除</h1>
 {{Form::open()}}
 <ul>
 @foreach($users as $user)
 <li>
 {{Form::checkbox('user[]',$user->id)}}
 {{Form::label($user->name)}}
 </li>
 @endforeach
 {{Form::submit('削除',['class'=>'btn btn-danger'])}}
 </ul>
 {{Form::close()}}
 </body>
  • 上記ビューファイルは、body部分のみを表示しています。
  • 7行目:チェックボックスのキーに配列、user[]を指定し、値にUserモデルのprimaryキーを指定します。
  • これで、チェックボックスにチェックした複数のデータが削除ボタンをクリックすると同時に削除されます。 

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です