Laravel 演習入門

名言が無い1

Migration の基礎

問題

名言を CRUD 操作するサイトを作ろうとしています。
quotes (名言)に関するテーブルを作り、初期値として、そのデータの個数がゼロであることを確かめてください。


問題は、以下の手順で解いてください。

  1. Red:小さいテストを作成し、失敗を確認してください
  2. Green:テストを成功させてください
  3. Refactor:整理・整頓してください
  4. 必要に応じて、1から3を繰り返してください

ヒント

背景知識
便利なアサーションの例

アサーションの調べ方 も合わせてご覧ください。
今回は、以下を使うのではないかと思います。

マイグレーションファイルの作成方法

bash:

php artisan make:migration create_xxx_table

Note

命名規則(ルール)として、 create_xxx_table とする必要があります。
xxx は、英語の複数形にするという規約(ルール)があります。
今回は、 quotes というテーブルを作りたいので、 create_quotes_table になります。

マイグレート状況を確認する方法

以下のコマンドで、その時点のマイグレート状況を確認できます。
bash:

php artisan migrate:status

解答例

続きを読む

実行環境:

Red

テストを作成し、失敗を確認します。
bash:

php artisan make:test Database/Migrations/QuotesTest

tests/Feature/Database/Migrations/QuotesTest.php:

<?php

namespace Tests\Feature\Database\Migrations;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class QuotesTest extends TestCase
{
    use RefreshDatabase;
    public function test_名言テーブルは空(): void
    {
        $this->assertDatabaseEmpty('quotes');
    }
}

bash:

php artisan test ./tests/Feature/Database/Migrations/QuotesTest.php

Green

マイグレーション(テーブル設計)ファイルを作成します。
bash:

php artisan make:migration create_quotes_table

テストを実行して、データベースが空であることを確認します。
bash:

php artisan test ./tests/Database/Migration/QuotesTest.php

Refactor

特にありません。

解説

続きを読む

マイグレーションについて

マイグレーションファイルとは、上でも説明した通り、データベースの設計図です。
up() メソッドにより、柔軟にテーブルを設計できます。

しかし、同じことは CREATE TABLE quotes ... と、生 SQL 文を実行してもできるはずです。

どうしてわざわざ、設計図であるマイグレーションファイルを作成する必要があるのでしょうか?

基本的なアイディアとしては、「確実に、全自動でそのテーブルの設計図を残す」ということです。

現状、動いているシステムのデータベーステーブルが、どのようなカラムで、どのような制約かは、最初にテーブルを作成したり、変更したときの SQL 文が、履歴として完全な形で残っている必要があります。

しかし、履歴管理を手動ですると、ミスが起こるかもしれません。

これを解決するには、 PHP ファイルで管理して、 Laravel で確認できるようにするのが良いでしょう。

さらに Laravel では、間違えたときの Rollback (down() メソッド)など、テーブルの操作は一通りできるようになっています。

Laravel においては、「データベースを生 SQL で触らない」というのは、鉄則になっているようです。

マイグレートについて

上記の例では、テストを実行するので、マイグレートのコマンドは出てきませんでした。

作成したマイグレートの実行の様子を見てみましょう。 マイグレーションファイルを作った後、次のコマンドを、1行ずつ実行してみてください。
bash:

php artisan migrate:status
php artisan migrate:fresh
php artisan migrate:status

また、実務における運用として、常に以下のコマンドで再作成できるようにしておくと、データベース周りの運用が楽になるようです。
詳しい説明は、 こちらのブログ記事 が参考になります。
bash:

php artisan migrate:fresh --seed

RefreshDatabase について

今回のテストでは、 class の中に use RefreshDatabase; が使われています。

この use 文によって、テスト内で php artisan migrate:fresh 同等の実行がなされます。

モデルと一緒に作る

多くの場合、マイグレーションファイルは、 Eloquent モデルと一緒に作成すると思うので、そちらのコマンドも紹介しておきます。
これは、 Model の問題で利用します。
bash:

php artisan make:model Quote --migration

このコマンドで、\App\Models\Quote クラス(Eloquent モデル)と、 create_quotes_table マイグレーションファイルが、同時に作成できます。

Note

Quote とコマンドに書くだけで、それを小文字にし、複数形にしたマイグレーションファイルを作成してくれます。
(たとえば、 Person => create_people_table のように、単純に末尾に s を付けるだけではない変換をしてくれます)


<= 問題を読んだ・解いた・理解したなどのチェックにご利用ください。クリックすると、チェックが変化します。
問題一覧に戻る