0

私はLaravel 5.2の上に構築された自己学習型のプロジェクトから始めています。私は最初の問題を発見しました。移行での自己参照です。Laravelの移行で自己参照関係(外部キー)を作成する方法は?

これは、(私がいないため、コメントを削除する必要があり、ポストが長く作る)のようなファイル2016_08_02_024942_create_navigation_table.phpがどのように見えるかです:

use Illuminate\Database\Migrations\Migration; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Support\Facades\Schema; 

class CreateNavigationTable extends Migration 
{ 
    public function up() 
    { 
     Schema::create('navigation', function (Blueprint $table) { 
      $table->engine = 'InnoDB'; 
      $table->increments('id')->unsigned(); 
      $table->integer('position')->unsigned(); 
      $table->string('title'); 
      $table->string('slug'); 
      $table->string('permissions')->nullable(); 
      $table->timestamps(); 
      $table->softDeletes(); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('articles'); 
    } 
} 

そして私はthisthisのような、ここでいくつかの記事を読んでいるので、thisと多くは、私は次のコードで2016_08_02_030158_add_parent_to_navigation_table.phpとして名前だけ関係して別のファイルを作るより:

use Illuminate\Database\Migrations\Migration; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Support\Facades\Schema; 

class AddParentToNavigationTable extends Migration 
{ 
    public function up() 
    { 
     Schema::table('navigation', function (Blueprint $table) { 
      $table->foreign('parent_id')->references('id')->on('navigation')->onUpdate('cascade')->onDelete('cascade'); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('articles'); 
    } 
} 

しかし、私はトンを得たphp artisan migrateコマンドを実行すると彼はエラーを以下、私は私が間違っているのかわからないです:

[照らしなさい\データベース\のQueryException] SQLSTATE [42S01]:ベーステーブルまたは ビューがすでに存在している:1050テーブル「ナビゲーション」は既に(SQLを存在します。 テーブルnavigationid int型符号なしnullではないAUTO_INCREMENT 主キー、符号なしposition int型ではないnullで、title VARCのHAR(255) ないヌル、slug VARCHAR(255)NOT NULL、permissions VARCHAR(255) ヌル、created_atタイムスタンプはnullを作成、updated_atタイムスタンプヌル、 deleted_atタイムスタンプヌル)デフォルトの文字セットのutf8 COLLATE utf8_unicode_ci内のENGIN電子= InnoDBは)

は[PDOException] SQLSTATE [42S01]:ベーステーブルまたはビューがすでに存在している: 1050テーブル 'ナビゲーション' は既に

缶が存在しますどんなアドバイスをいただけますか?私が間違っていることは何ですか? this packageが表示されていますが、問題が解決するかどうかはわかりません。

+0

もう一度実行する前にデータベースをクリアしましたか? – xdevnull

+0

また、増分() '' 'のために' '' unsigned() ''を追加する必要はありませんが、デフォルトでは符号なしです(ヒント) – xdevnull

+0

@xdevnull 'php artisan migrate:rollback 'をクリックし、DBをクリアしてください – ReynierPM

答えて

1

SQLSTATE [42S01]:ベーステーブルまたはビューがすでに存在している:1050表 'ナビゲーション' は既に

手段を使用すると、データベース内の同じテーブル名を持つ存在

だからあなたがする必要があります照合すると、テーブルとそのの名前がデータベースにありません。

  • 時々、さまざまな理由のためにテーブルを削除するために失敗し、再び

    php artisan migration:rollback同じ名前で

  • 実行移行を必ずテーブル名を確認していません。

関連する問題