Windows XAMPP で Laravel Eloquent ORM
Windows用XAMPP+Laravel Eloquentを使ってみる
- ※XAMPPのインストールフォルダは
D:/dev/xampp
にインストールします。 - ※XAMPPのインストールしていない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/38933″ textColor=”#000000″]WINDOWS XAMPP にて LARAVEL をインストール (XAMPP V1.8.3インストール)[/styled_link]
- ※Composerのインストールしていない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/38972″ textColor=”#000000″]WINDOWS XAMPP にて LARAVEL をインストール (COMPOSER 1.0.0-ALPHA8インストール)[/styled_link]
- ※Laravelのインストールしていない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/39295″ textColor=”#000000″]WINDOWS XAMPP にて LARAVEL をインストール (LARAVEL V4.2インストール)[/styled_link]
- ※Laravelの環境設定していない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/39416″ textColor=”#000000″]Windows XAMPP で Laravel 環境設定[/styled_link]
- ※LaravelのDB設定していない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/40368″ textColor=”#000000″]Windows用XAMPP+Laravel DB設定[/styled_link]
Eloquentとは
Eloquent(エロクエント)
Eloquent ORMはLaravelに含まれており、美しくシンプルなアクティブレコードによるデーター操作の実装です。それぞれのデータベーステーブルは関連する「モデル」と結びついています。
※読みは、Laravel Meetup Tokyo vol.3 に行ってきた!ではエロクアントにするそうです。
ORM(Object-relational mapping)
オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。オブジェクト関連マッピングとも呼ぶ。実際には、オブジェクト指向言語から使える「仮想」オブジェクトデータベースを構築する手法である。オブジェクト関係マッピングを行うソフトウェアパッケージは商用のものもフリーなものもあるが、場合によっては独自に開発することもある。
usersテーブルを作成したので、Userモデルを作りましょう
ということで、前回usersテーブルを作成したので、Userモデルを作成しましょう。
Eloquentでは、モデル名(今回はUser)の複数名にしたものをテーブル名とする(今回はusers)ようです。
これが標準で、もし変更する場合は、$tableという変数にテーブル名を入れます。
例えば、dragon_userというテーブルにUserモデルを紐づけたい場合は、以下のコードを書きます。
class User extends Eloquent { protected $table = 'dragon_user'; }
もう一つ主キーの制約があり、主キーの名前はid
であり、外部キーはモデル名_id
となります。
今回作成しているusers
の主キーはid
ですが、名前を変えたい場合は、以下の設定をする必要があります。
class User extends Eloquent { protected $table = 'users'; // defaultなので設定不要です。 protected $primaryKey = 'user'; }
外部キーに関しては、例えば部署を示すDEP
モデルがある場合、外部キー名はdep_id
となります。
Userモデル
もうすでにD:/dev/xampp/dragon/app/models/User.php
が存在します。開いてみることにしましょう。
app/models/User.php
<?php use IlluminateAuthUserTrait; use IlluminateAuthUserInterface; use IlluminateAuthRemindersRemindableTrait; use IlluminateAuthRemindersRemindableInterface; class User extends Eloquent implements UserInterface, RemindableInterface { use UserTrait, RemindableTrait; /** * モデルで使用されるデータベース * * @var string */ protected $table = 'users'; /** * モデルのJSON形式に含めない項目 * * @var array */ protected $hidden = array('password', 'remember_token'); }
$table
にusers
が指定してあります。
データを登録すると分かるのですが、Eloquentでは登録できる項目を指定しない場合は、その項目に登録出来ません。
ですので、登録する項目を指定していきます。
今回usersで利用する項目は、name, email, tel, zip, address
なので、配列で定義します。
app/models/User.php
<?php class User extends Eloquent { protected $fillable = array('name', 'email', 'tel', 'zip', 'address'); }
実際は上記だけで良いです。
Userコントローラ
モデルで遊ぶなら、コントローラを作成したほうがよいかと思います。
まずは、ルートを変更します。
app/route.php
Route::controller('/user', 'UserController');
上記を追加します。
Route::controller
は、/user
にgetでアクセスした場合は、getIndex
、postでアクセスした場合は、postIndex
を実行します。
また、/user/create
にgetアクセスした場合は、getCreate
にアクセスします。
補足ですが、関数名がgetAddUser
というように、キャメルケース(結合している部分が大文字になるラクダ文字)の場合は、user/add-user
でアクセスします。
ルートの設定が終了したら、コントローラを作成します。
app/controllers/UserController.php
<?php class UserController extends BaseController { public function getIndex(){ return View::make('user')->with('users', User::orderBy('name', 'desc')->get()); } public function postCreate(){ $user = Input::only('name', 'email', 'tel', 'zip', 'address'); User::create($user); return Redirect::to('/user'); } public function postUpdate(){ $user = Input::only('name', 'email', 'tel', 'zip', 'address'); $model = User::find(Input::get('id')); $model->update($user); return Redirect::to('/user'); } public function postDelete(){ User::destroy(Input::only('id')); return Redirect::to('/user'); } }
まず、/user
のgetのアクセスでは、ユーザのリストを名前降順で出力します。
ここで、View::make
とありますが、テンプレートへ処理を依頼しています。
作成している内容としては、残しはpostでのやりとりで、登録(postCreate)、更新(postUpdate)、削除(postDelete)としています。
次回はBladeを含めたテンプレートを書いていきたいと思います。
WEBアプリケーション関連 人気連載リンク
基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載
より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載