Laravel 演習入門

名言集には名言がある

Migration の基礎

問題

名言を CRUD 操作するサイトを作ろうとしています。
Quote (名言)に関する Eloquent モデルと、それに対応するテーブルを作ってください。
次に、そのテーブルのスキーマに quote カラムがあることを確かめてください。


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

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

ヒント

用語の意味

Laravel では、 Illuminate\Support\Facades\Schema::hasColumn($table_name, $column_name) で、$table_name テーブルに $column_name が存在するかどうかの真偽値を返します。

便利なアサーションの例

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

解答例

続きを読む

実行環境:

Red

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

php artisan make:test App/Models/QuoteTest
<?php

namespace Tests\Feature\App\Models;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use Illuminate\Support\Facades\Schema;

class QuoteTest extends TestCase
{
    use RefreshDatabase;
    public function test_quotes_table_has_quote_column(): void
    {
        $this->assertTrue(Schema::hasColumn('quotes', 'quote'));
    }
}
php artisan test ./tests/Feature/App/Models/QuoteTest.php

Green

Quote モデル及びそのテーブルを作成します。
bash:

php artisan make:model Quote -m

マイグレーションファイルを編集します。
database/migrations/日付_数字_create_quotes_table.php:

    public function up(): void
    {
        Schema::create('quotes', function (Blueprint $table) {
            $table->id();
            $table->text('quote');
            $table->timestamps();
        });
    }
    public function down(): void
    {
        Schema::dropIfExists('quotes');
    }

テストを実行し、成功を確認します。

Refactor

今回は、特にありません。

解説

続きを読む

マイグレーションファイルの書き方

マイグレーションファイルには、 up() メソッドと down() メソッドがあります。

use RefreshDatabase; のあるテストの実行時や、 php artisan migrate:fresh --seed を行うときに実行されるのが up() メソッドです。
一方、 php artisan migrate:rollback 時に実行されるのが down() メソッドです。
つまり、 down() メソッドは、 up() メソッドを無かったことにする操作を書きます。

今回の問題では、up() メソッドはテーブルを作成しますので、 down() メソッドでは、そのテーブルを削除するコマンドが書かれていると思います。(デフォルトのままです)

ただし、データベースには、単純な逆操作ができない操作もありますから、実装時は注意が必要です。


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