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モデルを紐づけたい場合は、以下のコードを書きます。

1
2
3
class User extends Eloquent {
    protected $table = 'dragon_user';
}

もう一つ主キーの制約があり、主キーの名前はidであり、外部キーはモデル名_idとなります。
今回作成しているusersの主キーはidですが、名前を変えたい場合は、以下の設定をする必要があります。

1
2
3
4
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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

1
2
3
4
<?php
class User extends Eloquent {
    protected $fillable = array('name', 'email', 'tel', 'zip', 'address');
}

実際は上記だけで良いです。

Userコントローラ

モデルで遊ぶなら、コントローラを作成したほうがよいかと思います。
まずは、ルートを変更します。

app/route.php

1
Route::controller('/user', 'UserController');

上記を追加します。
Route::controllerは、/userにgetでアクセスした場合は、getIndex、postでアクセスした場合は、postIndexを実行します。
また、/user/createにgetアクセスした場合は、getCreateにアクセスします。
補足ですが、関数名がgetAddUserというように、キャメルケース(結合している部分が大文字になるラクダ文字)の場合は、user/add-userでアクセスします。

ルートの設定が終了したら、コントローラを作成します。

app/controllers/UserController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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