【Laravel】Migrationによるカラムの更新
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
Migrationでデータベースカラムを更新をする場合は、
composerで外部パッケージを導入しておかなければなりません
doctrine/dbalパッケージの導入
コンソールでcomposerコマンドを実行しdoctrine/dbalというパッケージを導入
$ composer require doctrine/dbal
実行結果はこちら
$ composer require doctrine/dbal Using version ^2.8 for doctrine/dbal ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 3 installs, 0 updates, 0 removals - Installing doctrine/event-manager (v1.0.0): Downloading (100%) - Installing doctrine/cache (v1.8.0): Downloading (100%) - Installing doctrine/dbal (v2.8.0): Downloading (100%) doctrine/cache suggests installing alcaeus/mongo-php-adapter (Required to use legacy MongoDB driver) Writing lock file Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully.
Package manifest generated successfully.
と最後に表示されれば成功です。
composer.jsonファイルからも確認できます。
"require": { "php": "^7.1.3", <b>"doctrine/dbal": "^2.8",</b> "fideloper/proxy": "^4.0", "laravel/framework": "5.7.*", "laravel/tinker": "^1.0" },
composer.json
requireに"doctrine/dbal"というパッケージが追記されています。
Migrationによるデータベースカラムの更新
以下のコマンドを実行すると、
データベースカラムの更新用Migrationファイルが作成されます。
$ php artisan make:migration add_column_body_articles_table --table=articles Created Migration: 2018_11_05_072111_add_column_body_articles_table
Migrationファイルが作成されました!
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddColumnBodyArticlesTable extends Migration { public function up() { Schema::table('articles', function (Blueprint $table) { $table->string('body'); }); } public function down() { } }
databases>migrations>xxxxxx_add_column_body_articles_table.php
upメソッド内で、
Blueprintオブジェクトの$tableを使い、
string型のbodyメソッドを追加しました。
それではMigrateを実行します。
$ php artisan migrate Migrating: 2018_11_05_072111_add_column_body_articles_table Migrated: 2018_11_05_072111_add_column_body_articles_table
MySQLで確認します。
mysql> show columns from articles; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | title | varchar(255) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | | body | varchar(255) | NO | | NULL | | +------------+------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
無事bodyカラムが追加されました。
続いてロールバックを実行してみます。
$ php artisan migrate:rollback Rolling back: 2018_11_05_072111_add_column_body_articles_table Rolled back: 2018_11_05_072111_add_column_body_articles_table
MySQLを確認します。
mysql> show columns from articles; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | title | varchar(255) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | | body | varchar(255) | NO | | NULL | | +------------+------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
結果は…ロールバックできていません!
add_column_price_event_tableのMigrationファイルのdownメソッドに
ロールバック用の記述が無いからです!
public function down()
{
Schema::table('articles', function (Blueprint $table) {
$table->dropColumn('body');
});
}
xxxxxx_add_column_body_articles_table.php
カラム削除はdropColumnメソッドで実行します。
それではまずはMigrationを全く実行していない状態にしましょう。
$ php artisan migrate:reset;
migrate:resetで、全Migrationをロールバックすることができます!
それではもう一度migrateした後、
add_column_body_articles_tableのMigrationのみをロールバックします。
$ php artisan migrate Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table Migrating: 2018_11_05_053713_create_articles_table Migrated: 2018_11_05_053713_create_articles_table Migrating: 2018_11_05_072111_add_column_body_articles_table Migrated: 2018_11_05_072111_add_column_body_articles_table $ php artisan migrate:rollback --step=1 Rolling back: 2018_11_05_072111_add_column_body_articles_table Rolled back: 2018_11_05_072111_add_column_body_articles_table
ロールバックのオプションにstepを指定すると、
指定した数値分のMigrationファイルだけロールバックします。
それではMySQLで、
ロールバックによりbodyカラムが削除されているか確認しましょう。
mysql> show columns from articles; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | title | varchar(255) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
無事ロールバックされていました!
今回はここまでです、ありがとうございました〜