前提
状況
MySQLのカラムを8個生成したかったので、
↓ database/migration/(timestamp)_create_reviews_table.php
・ ・ ・ public function up() { Schema::create('reviews', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade'); $table->string('title'); $table->longText('body'); $table->string('image')->nullable(); $table->tinyInteger('status')->default(1)->comment('0=下書き, 1=アクティブ, 2=削除済み'); $table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP')); $table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP')); }); } ・ ・ ・
をLaravelで記述し、
php artisan migrate
をターミナルで実行。
↓実行結果
(ユーザー名):~/environment/books $ php artisan migrate Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.03 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.02 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds) Migrating: 2021_04_13_124816_create_reviews_table Migrated: 2021_04_13_124816_create_reviews_table (0.04 seconds)
とエラーが出ずに処理されたので、生成されたカラムを確認すべくMySQLへログイン。
(ユーザー名):~/environment/books $ mysql -uroot -p****** mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.31 MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
カラムを作ったデータベースを読み込み、データベースを確認した。
mysql> use books; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SHOW FULL COLUMNS FROM reviews;
困ったこと
mysql> SHOW FULL COLUMNS FROM reviews;
の結果、予想した出力結果と実際の結果が異なった
↓予想した出力結果(狙い値)
+------------+---------------------+--------------------+------+-----+-------------------+-----------------------------+---------------------------------+------------------------------------------------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +------------+---------------------+--------------------+------+-----+-------------------+-----------------------------+---------------------------------+------------------------------------------------+ | id | bigint(20) unsigned | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | | | user_id | bigint(20) unsigned | NULL | NO | MUL | NULL | | select,insert,update,references | | | title | varchar(255) | utf8mb4_unicode_ci | NO | | NULL | | select,insert,update,references | | | body | longtext | utf8mb4_unicode_ci | NO | | NULL | | select,insert,update,references | | | image | varchar(255) | utf8mb4_unicode_ci | YES | | NULL | | select,insert,update,references | | | status | tinyint(4) | NULL | NO | | 1 | | select,insert,update,references | 0=下書き, 1=アクティブ, 2=削除済み | | updated_at | timestamp | NULL | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | select,insert,update,references | | | created_at | timestamp | NULL | NO | | CURRENT_TIMESTAMP | | select,insert,update,references | | +------------+---------------------+--------------------+------+-----+-------------------+-----------------------------+---------------------------------+------------------------------------------------+ **8 rows** in set (0.00 sec)
⇒8個のカラム
↓実際の出力結果
+------------+---------------------+--------------------+------+-----+-------------------+-----------------------------+---------------------------------+------------------------------------------------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +------------+---------------------+--------------------+------+-----+-------------------+-----------------------------+---------------------------------+------------------------------------------------+ | id | bigint(20) unsigned | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | | | updated_at | timestamp | NULL | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | select,insert,update,references | | | created_at | timestamp | NULL | NO | | CURRENT_TIMESTAMP | | select,insert,update,references | | +------------+---------------------+--------------------+------+-----+-------------------+-----------------------------+---------------------------------+------------------------------------------------+ **3 rows** in set (0.00 sec)
⇒3個のカラム
※補足 'id':Laravelインストール時の初期カラム 'update_at', 'created_at':追加したカラム
やったこと①
教材を進める上でヌケ・モレがあったか?
仮説
「手順を飛ばした」「タイポ」等により、自分の見落としによるものがあったか再度確認
対策
特にタイポはよくあるので(↓こんな感じで…)、教材のLaravelのコードをそのままコピペしたり(あまり好まないが)、何回も教材を見返した。
結果:×
特にヌケ・モレはなく、正しく記述していたので解決に至らず。
やったこと②
キャッシュ等が残っていたりしたか
仮説
キャッシュが残っていた、もしくはconfigが残っていた等が原因か、と推測
対策
php artisan cache:clear php artisan config:clear
を実行し、更にサーバーを起動し、
php artisan serve --host=$IP --port=$PORT
すぐに切断した後
php artisan migrate
実行
結果:×
php artisan migrate
の出力結果は
No migrations table ※確かこの英語…
となり、依然この状態↓
やったこと③
一度データベースをきれいにしてみよう
仮説
「中途半端な3個のカラムがあるからダメなのでは?」と推測
対策
今MySQLにも反映されているデータベースを一度きれいにするために
php artisan migrate:rollback --step=1
を繰り返し行い、データベースを一旦リセット。
php artisan migrate:status
の結果が下記の通り、"Ran"の部分が全て"N"にしたら
+------+----------------------------------------+ | Ran? | Migration | +------+----------------------------------------+ | N | (timestamp)_create_***_*** | | N | (timestamp)_create_*** | | N | (timestamp)_*** | | N | (timestamp)_*** | +------+----------------------------------------+
その状態で再度マイグレーション実行。
php artisan migrate
↓実行結果
いい感じに通ったかも?
結果:〇
MySQLへログインし、データベースを確認をすると…
狙い値通り、データベースのカラムが生成されている。
備考
・そもそもなぜカラムを生成するLaravelのコードは間違っていなかったのに、結果として3つしかカラムが生成されなかったのか がわかっていない ・なぜrollbackで解決したのか が不明点であるため、わかれば幸い。
あと、rollbackではなく、
php artisan fresh(refresh)
でもいけたのでは?と思ったり。