SHOOTのブログ見てページ表示の方法は分かったけど、
そろそろDB操作したい!!
こんな方に向けて記事を書きます。
私は未経験からWebエンジニアに転身した経験から、
初心者からWebエンジニアになりたい方を助けるような記事を書いています。
先日の記事でルーティング→コントローラー→ビューの流れでページを表示する方法を解説しましたが、
https://kumatetsublog.com/shoot/blog/laravel-beginner-routing-controller-view
次のステップとして、DBを使う準備をしていきます。
データベースマイグレーションとは?
本来、DBを扱う際はSQLコマンドを叩いてテーブルを作成・設定しますが、
フレームワークには、(データベース)マイグレーションという便利な機能が標準で備わっています。
マイグレーションとは、アプリで使用するテーブルの定義を自動生成・管理する機能です。
マイグレーションファイルと呼ばれるファイルにテーブル名やカラム名などのスキーマ情報を記述し、「マイグレート」するとDBがマイグレーションファイルにしたがって更新されます。
マイグレーションファイルを参照さえすれば、作成するアプリにはどんなテーブルにどんなカラムを作成したかを管理することができるのでぜひマイグレーションは使いたいところです。
今回はLaravelでのマイグレーション方法を紹介します。
マイグレーション手順
マイグレーションファイル作成
Laravelでは、マイグレーションファイルが用意されているので
まずはそちらを1ファイルご覧ください。
- database/migration/2014_10_12_000000_create_users_table.php
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
ユーザー情報を保持するテーブルのマイグレーションファイルです。
upメソッドの中に作成するテーブル(users)とカラム(id, name,email,…)
が記述されています。
マイグレートされた際には、upメソッドの内容が反映されたテーブルが作成されます。
それでは、マイグレーションファイルを自分で作成してみます。
Laravelでは、ありがたいことにマイグレーションファイルを自動生成するコマンドがいくつか用意されています。
今回は、Modelを作成するコマンドにオプションをつけることでマイグレーションファイルを自動生成します。
php artisan make:model Tweet -a
本来Modelを作成するコマンドですが、
今回つけたオプション(-a)は、model以外にもcontroller, factory, resourceを自動生成するオプションです。
以下のコマンドで、make:modelのオプションの説明を見ることができます。
php artisan make:model --help
今後の開発で使用するので-aオプションをつけました。
マイグレーションファイルを単独で自動生成したい場合は以下のコマンドを叩けばOK
php artisan make:migration (任意の名前)
マイグレーションファイル実装
ファイル自体は自動生成されたので、
カラム情報を記述します。
- 2019_11_26_142555_create_tweets_table.php
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tweets', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('theme_id')->nullable();
$table->string('tweet');
$table->unsignedInteger('vote_count')->default(0);
$table->unsignedInteger('report_count')->default(0);
$table->unsignedInteger('show_count')->default(0);
$table->unsignedTinyInteger('status')->default(1);
$table->timestamps();
$table->index('vote_count', 'vote_count_index');
});
}
id, timestampは元々自動生成されています。
型やカラム名を指定するだけでなく、
nullable():デフォルト値NULL
default(0):デフォルト値0
index(): テーブルにインデックスを設定(検索クエリを高速化する仕組み)
など、カラムに様々な情報を設定することができます。
マイグレート
DBを起動してマイグレートすればマイグレーションファイルを元にテーブルを作成できます。
MySQLコンテナを作成してあるので、docker-composeで起動します。
Dockerに関しては、Laravelの開発に必要な準備をしているこちらの記事を参照ください。
docker-compose up -d
MySQLが起動したのでマイグレートします
php artisan migrate
マイグレート成功です!
users, password_resetsはデフォルトで用意されていたマイグレーションファイル
tweetsは作成したマイグレーションファイルです。
ちなみにDBの状態をマイグレーションする前にしたいときは、以下のコマンドを叩けば戻ります。
php artisan migrate:rollback
マイグレーションファイルのdownメソッドが実行されます。
作成したテーブルが元に戻ってるはずです。
アプリ開発にマイグレーションは必須
Laravelのみならず、様々なフレームワークにはこの「マイグレーション」の標準機能があります。
アプリ開発の効率化には欠かせない機能なので、ぜひ覚えておきましょう。
さて、過去のLaravelに関する記事は、
Laravelの開発準備
ルーティング・コントローラー・ビュー
マイグレーション(本記事)
でページ表示方法とDB準備ができました。
次回は「アプリケーションミドルウェア」について解説します!
↓↓
それでは!
コメント