Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@shinofara

# 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も複雑な手順踏まなくていいという分いいかもしれない
あとは、キャッシュとか色々調べてからになるけど

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
12
Help us understand the problem. What are the problem?