##お約束事
本記事で発信される情報は、正確性、完全性、有用性、その他の事項について一切責任を負いかねます。自己判断にてご活用ください。
#全体の流れ
- Migrationを行いテーブルを作成する
- migrationコマンドを実行するための空ファイルの作成
- 作成されたmigrationファイルをテーブル構造通りに記述する
- migrateコマンドで実際にテーブルを作成する
- 型変更、カラム追加・削除等
- Sheederを用いてテーブルデータを投入する
- seedを実行するための空ファイルの作成
- 作成されたseedファイルを投入したいデータに合わせて記述する
- seedコマンドで実際にテーブルにデータを投入する
##Migrationでテーブルを作成する
###1、migrationするための空ファイルの作成
$php artisan make:migration {テーブル名}
Created Migration: {年}_{月}_{日}_{時間}_{テーブル名}
{プロジェクトRoot}/database/migrationsにファイルが作成される。
2、作成されたmigrationファイルをテーブル構造通りに記述する
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AppSystem extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//{}は不要
Schema::create('{テーブル名}', function (Blueprint $table) {
$table->bigIncrements('id');//インクリメントするbigInt
$table->boolean('is_maintenance');//bool型
$table->text('app_version');//text
$table->dateTime("created_at");//dateTime
$table->dateTime("updated_at");//dateTime
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//{}は不要
Schema::dropIfExists('{テーブル名}');
}
}
3、migrateコマンドで実際にテーブルを作成する
$php artisan migrate
Migrating: 2020_03_21_115544_app_system
Migrated: 2020_03_21_115544_app_system (0.05 seconds)
※Dockerの場合は、workspaceにログインして実行しないとErrorになります。
作業後にDBにテーブルが作成されていること、migrationsテーブルに実行履歴が登録されていることが確認できる。
4、型変更、カラム追加・削除等
####型変更
php artisan make:migration change_{対象カラム名}_{テーブル名}_table --table={テーブル名}
Created Migration: 2020_03_21_141300_xxxxxxxxxxxxxxx
※何をしたかわかりやすい名前がよいと思います。
public function up()
{
Schema::table('{テーブル名}', function (Blueprint $table) {
//新しい型
$table->text('{カラム名}')->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('{テーブル名}', function (Blueprint $table) {
//変更前の型
$table->string('{カラム名}')->change();
});
}
####カラム追加、削除
php artisan make:migration add_{対象カラム名}_{テーブル名}_table --table={テーブル名}
Created Migration: 2020_03_21_141300_xxxxxxxxxxxxxxx
※何をしたかわかりやすい名前がよいと思います。
public function up()
{
Schema::table('{テーブル名}', function (Blueprint $table) {
//カラム追加 afterで指定したカラムの後ろに追加できる
$table->string('{カラム名}')->after('id');
}); }
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('{テーブル名}', function (Blueprint $table) {
//カラム削除
$table->dropColumn('{カラム名}');
});
}
##Seederでのデータ投入
###1、seedを実行するための空ファイルの作成
$php artisan make:seeder {ファイル名}
Seeder created successfully.
{プロジェクトRoot}/database/seedsにファイルが作成される
$php composer dump-autoload
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: encore/laravel-admin
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
###2、 作成されたseedファイルを投入したいデータに合わせて記述する
<?php
use Illuminate\Database\Seeder;
use App\Libs\Common;
class LevelSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//Jsonファイルを読み込みdecodeしてくれる自作クラスを呼び出す。
//SpreadSheetで作成したマスターデータをJson化したデータが配置してある。
$dataArray = Common::getJsonFile('{jsonFile名}');
//Jsonデータを1件ずつ挿入
foreach ($dataArray as $value){
$insertData = array();
foreach ($value as $key => $data) {
$insertData[$key] = $data;
}
DB::table('level')->insert([
$insertData
]);
}
}
}
<?php
namespace app\Libs;
class Common
{
public static function getJsonFile($fileName){
$url = public_path() . '/json/'.$fileName.'.json';
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$arr = json_decode($json, true);
return $arr;
}
}
※ファイルの存在チェックとかはしておりません。必要であればしてください。
※本番環境にjsonファイルはアップしないので、このまま本番にアップするとマスターデータ丸見え等
セキュリティ的に良くないので.gitignore等で除外してください。
###3、seedコマンドで実際にテーブルにデータを投入する
$php artisan db:seed --class={1で作成したクラスを指定}
Database seeding completed successfully.
※数百件レベルのデータなら秒で終わるので負荷とかは検討していません。