Tips

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');

}

$tableusersが指定してあります。
データを登録すると分かるのですが、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活用を学ぶなら・・
魁!小野の塾 連載

Recent News

Recent Tips

Tag Search