自分メモです
マイグレートするとエラーが出て気に食わない
yyyy_mm_dd_000000_create_users_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email',255)->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
php artisan migrate
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists
テーブルは正常に作成されているが
非常に気持ち悪いので原因調査
エラーメッセージ翻訳
とりあえず翻訳
■原文
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists
■翻訳
SQLSTATE[42S01]:基本のテーブルまたは眺めは、すでに存在する: 1050テーブル『ユーザー』はすでに存在する
なるほどあるのか、いやそうだとは思ってたけど、migrateするとcreateしちゃうねん
どないすれば…。
対策
下記コマンドは
laravel\database\migrations のディレクトリの処理を素直に実行してくれるコマンドのようです。
php artisan migrate
そのため素直に順番に実行していただいても問題ないようにするために
対象のテーブルが存在したら、Createを実行しないという処理を追加します
public function up()
{
// 対象の存在をしていれば、処理を中断する
if(Schema::hasTable('users')){
return;
}
// 対象のテーブルを作成する
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email',255)->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
上記ソースのように
事前チェックすればOK
// 対象の存在をしていれば、処理を中断する
if(Schema::hasTable('users')){
return;
}