Help us understand the problem. What is going on with this article?

# laravelのORMとMIGRATEを触ってみた。(メモ)

More than 5 years have passed since last update.

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

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

shinofara
work: Emacs/VisualStudioCode Golang/PHP/Pyhton/Shell AWS/Docker/VirtualBox/Mac Vagrant/Terraform/Packer/Ansible OSS/LT like: Photo/Diving/Snowboard history: Y! -> schoo -> Y! -> MedPeer
https://log.shinofara.xyz/
moneyforward
「お金を前へ。人生をもっと前へ。」をMissionとして、個人向け、法人向け様々なFintechサービスを開発、提供しています。
https://moneyforward.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした