# laravelのORMとMIGRATEを触ってみた。（メモ）

とりあえずは、公式のチュートリアルを参考に

-> http://laravel.com/docs/quick

### まずは、Mysqlに対してのMIGRATEなど

#### テーブルを作成してみよう

プロジェクトディレクトリ以下まで移動してから、色々やっていきます。

```
php artisan migrate:make create_users_table
```

create_users_tableってクラスのファイルを作る！

app/database/migrations以下にファイルが

```
$ ls -la app/database/migrations
drwxr-xr-x 2 schoo wheel 4096 Jan 30 14:36 .
drwxr-xr-x 4 schoo wheel 4096 Jan 29 17:36 ..
-rw-r--r-- 1 schoo wheel    0 Jan 29 17:36 .gitkeep
-rw-r--r-- 1 root  root   598 Jan 30 14:27 2014_01_29_164142_create_users_table.php
```

年月日と時間がファイル名の先頭についてる

早速編集してみます

```
<?php

use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('users', function($table)
            {
                $table->increments('id');
                $table->string('email')->unique();
                $table->string('name');
                $table->timestamps();
            });
        }

        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::drop('users');
        }

}
```

upにはmigrate実行時に走る処理を
downにはrollback時に走る処理を

準備が出来たので、早速実行してみます。

```
$ php artisan migrate
```

完了したので、mysqlを確認してみます。

```
mysql> desc users;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| email      | varchar(255)     | NO   | UNI | NULL                |                |
| name       | varchar(255)     | NO   |     | NULL                |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+------------+------------------+------+-----+---------------------+----------------+
```

お、できてる！

#### カラム追加してみよう

次は、カラムの追加をしてみます。

```
$ php artisan migrate:make modify_users_table
```

今回もapp/database/migrations以下にファイルができています。
僕の場合は、2014_01_30_052837_modify_users_table.php

早速編集

```
public function up()
{
    Schema::table('users', function($table)
    {
        $table->string('company');
    });
        //
}
public function down()
{
        //
}
```

usersテーブルに、varcharでcompanyを作成する。

```
$ php artisan migrate
```

```
mysql> desc users;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| email      | varchar(255)     | NO   | UNI | NULL                |                |
| name       | varchar(255)     | NO   |     | NULL                |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| company    | varchar(255)     | NO   |     | NULL                |                |
+------------+------------------+------+-----+---------------------+----------------+
```

追加された。

#### 消してみよう

最後は、消してみてみましょう

```
$ php artisan migrate:make delete_company_users_table
```

今回もapp/database/migrations以下にファイルができています。
僕の場合は、2014_01_30_053153_delete_company_users_table.php

早速編集

```
public function up()
{
    Schema::table('users', function($table)
    {
        $table->dropColumn('company');
    });
        //
}
public function down()
{
    Schema::table('users', function($table)
    {
        $table->string('company');
    });
        //
}
```

実行

```
$ php artisan migrate
```

確認

```
mysql> desc users;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| email      | varchar(255)     | NO   | UNI | NULL                |                |
| name       | varchar(255)     | NO   |     | NULL                |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+------------+------------------+------+-----+---------------------+----------------+
```

結構使い勝手がいいかんじです！

### 次はORM

実は、上の手順を全て行っていると
app/models/User.php

というファイルが作成されていますので、今回は
Controller、View、Routeファイルだけ触ります。

#### Controllerを作ってみる

app/controllers/UserController.php

```
<?php

class UserController extends BaseController {

        public function showUsers()
        {
        		//users全件取得
                $users = User::all();
                //usersという名前で、view tenplateに渡しますよ
                return View::make('users')->with('users', $users);
        }

}
```

これだけです。

次は、viewテンプレート

今回の内容では、不要ですがレイアウトファイルを作ります

```
$ vim app/views/layout.blade.php
<html>
    <body>
        <h1>Laravel Quickstart</h1>

        @yield('content')
    </body>
</html>
```

レイアウトファイル、テンプレートの使い方に関しては、今回は省略（というより、調べてない。。）

次テンプレート

```
$ vim app/views/users.blade.php
@extends('layout')

@section('content')
    @foreach($users as $user)
        <p>{{ $user->name }} {{ $user->email }}</p>
    @endforeach
@stop
```

レイアウトに、contentセクションにforeachなどなど展開する。
foreachの箇所で、Controllerで定義したusersを使用しています。
これでテンプレートも完了

あとは、リクエストに対応する為、routeファイルを編集するだけ

```
$ vim app/routes.php 
Route::get('users', 'UserController@showUsers');
```

これであとは、ブラウザから
http://....../usersとアクセスするそれだけ

ORMもDBMIGRATEも複雑な手順踏まなくていいという分いいかもしれない
あとは、キャッシュとか色々調べてからになるけど