WinRoadのLaravel4初心者講座

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

Winroad徒然草の管理人がお届けします
Eloquent ORMで新規作成(INSERT)

Eloquent ORMで新規作成(INSERT)

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

LaravelのEloquent ORMで新しいレコードを作成するには、new演算子で、モデルの新しいインスタンスを作成し、saveメソッドで保存する方法と、createメソッドを使用する方法があります。

new演算子を使用する

基本的に新規作成の場合は、new演算子で、新しいモデルを作成し、saveメソッドで、テーブルに新しいレコードを保存します。下記に例を記述します。

(例)app/controllers/UserController.php

<?php
 class UserController extends BaseController{
 public function getCreate(){
 return View::make('user/create');
 }
 public function postCreate(){
 //Userモデルのインスタンス化
 $user =new User;
 //受信したnameキーの値をモデルのnameプロパティにセット
 $user->name = Input::get('name');
 //受信したemaiキーの値をモデルのemailプロパティにセット
 $user->email = Input::get('email');
 //受信したpasswordキーの値をモデルのpasswordプロパティにセット
 $user->password = Input::get('password');
 $user->save();
 return Redirect::to('/');
 }
  • 3-5行目:HTTPメソッドがGET時の処理です。app/views/user/create.blade.php(又は、create.php)を開きます。
  • 6-16行目:HTTPメソッドがPOST時の処理です。バリデーション処理は端折っています。
  • 15行目:saveメソッドで、新しいレコードを保存します。

createメソッドを使用する

createメソッドなら、User::create($data)で簡単に、新規作成することができますが、事前に複数代入の設定をしておく必要があります。fillable(許可)かguarded(禁止)のどちらかのプロパティをモデルに指定しておいてください。

それでは、createメソッドの使用方法を下記に記述しておきます。

(例)app/controllers/UserController.php

<?php
 class UserController extends BaseController{
 public function getCreate(){
 return View::make('user/create');
 }
 public function postCreate(){
 $user =User::create(Input::all());
 return Redirect::to('/');
 }
  • 7行目:createメソッドは、モデルのインスタンス化からテーブルへの書き戻しまでを、たったこれだけで処理してくれます。只、逆に言えば、簡単すぎる故に、重大なセキュリティの欠陥になる可能性があります。そのため、Laravelでは、デフォルトで、複数代入を制限しています。

新規モデルの値の取得

新規作成したモデルには、主キーや作成日が自動作成されています。自分で作成したのではないので、IDの値や作成日は、わかりません。どのようにしたらいいのでしょうか。これは、とても簡単です。

これは、今作成したばかりのモデルのidや、created_atにアクセスするだけで取得することが出来ます。

$id = $user->id;
$created_at = $user->created_at;

firstOrCreateメソッド

新規作成する場合、同じデータがテーブルに存在するかどうかの重複確認をしてから、作成する場合は、多々あると思います。こんな時に、fisrOrCreateメソッドは、便利です。※尚、重複確認だけなら、バリデーションのsame:フィールドやunique::テーブル,カラムで確認することが出来ます。

(例)

//存在確認してから、新規作成する場合
 $user=User::where('name','nakada')->first();
 if(!isset($user)){
 $new_user = new User;
 $new_user ->name = 'nakada';
 $new_user->save();
 }
 //firstOrCreateメソッドの場合
 $user = User::firstOrCreate(['name'=>'nakada']);

« »

コメントを残す

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