WinRoadのLaravel4初心者講座

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

Winroad徒然草の管理人がお届けします
EloquentORMでデータ更新(UPDATE)

EloquentORMでデータ更新(UPDATE)

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

Eloquent ORMでデータを更新するには、更新するモデルをインスタンス化し、モデルの内容を更新したら、saveメソッドでデータベーステーブルに書き戻します。

取得したモデルを更新する

(例)app/controllers/UserController.php

<?php
 class UserController extends BaseController{
 public function getUpdate($id){
 $data['user']=User::find($id);
 return View::make('user/update',$data);
 }
 public function postUpdate(){
 $user=User::find(Input::get('id'));
 $user->email=Input::get('email');
 $user->save();
 return View::make('user/update',['user'=>$user]);
 }
 }
  • 3-6行目:HTTPメソッドがGET時の処理を行います。只単に、ビューファイルを表示しているだけです。
  • 7-12行目:HTTPメソッドがPOST時の処理を行います。バリデーション処理は端折っています。
  • 8行目:hidden要素で送信されてきたidを取得して、Userモデルをインスタンス化します。
  • 9行目:モデルのemailプロパティを受信したemail項目の値で更新します。
  • 10行目:saveメソッドで、データベーステーブルへ書き戻します。
  • 11行目:上記は、下記のようにも記述することができます。
    return View::make(‘user/update’,compact(‘user’));

モデルと関連を保存する

取得したモデルだけでなく、関連したデータ(例えば、hasOneやbelongsToで関連づけしたモデル)も同時に保存する場合は、pushメソッドを使用します。

(例)app/controllers/UserController.php

<?php
 class UserController extends BaseController{
 public function getUpdate($id){
 $data['user']=User::find($id);
 return View::make('user/update',$data);
 }
 public function postUpdate(){
 $user=User::find(Input::get('id'));
 $user->email=Input::get('email');
 $user->profile->birthday=Input::get('birthday');
 $user->push();
 return View::make('user/update',['user'=>$user]);
 }
 }
  • 10行目:profileモデルがUserモデルとhasOneやbelongsToの関係にある場合、取得したモデルは、profileの情報も保持しています。そのprofileモデルのbirthdayプロパティを受信したbirthday項目で更新します。
  • 11行目:pushメソッドで、usersテーブルのemailカラムの値だけでなく、profilesテーブルのbirthdayカラムの値も同時に更新します。

複数モデルの同時更新

上記は、一つのモデル及び関連するモデルの更新でしたが、EloquentORMでは、複数モデルを同時に更新することも出来ます。

$users=User::where(‘role_id’,'<‘,10)->update([‘activate’=>0]);
$users->save();

  • 上記の例では、role_idが10未満のUserのactivateを0に変更しています。つまり、一時的に、一定のユーザーに対してアクセスできないような処理を行うことが出来ます。

« »

コメントを残す

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