2016-05-20 16 views
2

私は、次の移行を持っている:Laravel移行の問題:表の自己関係

Schema::create('tags', function (Blueprint $table) { 
      $table->increments('id')->unsigned()->index(); 
      $table->string('name',30); 
      $table->integer('parent_id')->nullable(); 
      $table->string('image_url'); 
      $table->string('image_id',50); 
      $table->timestamps(); 

      $table->foreign('parent_id') 
        ->references('id')->on('tags') 
        ->onDelete('cascade'); 
     }); 

次の問題まで来る:

(errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alte 
    r table `tags` add constraint `tags_parent_id_foreign` foreign key (`parent_id`) references `tags` (`id`) on delete cascade) 

すべてが良いです。私は多くをチェックしたが、動作していない。

次の質問は私のために働いていません。私はなぜ、その質問は私の問題に対処していないのか分からない。

StackOverFlow Question

+0

[Laravel移行自己参照外部キー発行]の可能な複製(http://stackoverflow.com/questions/18427391/laravel-migration-self-referencing-foreign-key-issue) – Samsquanch

答えて

2
$table->increments('id') 

列タイプinteger-のショートカットです>符号なし

値はドンの範囲ので、基本的には、MySQLがあなたをさせませんので、整数に符号なし整数をリンクしようとしています「トン試合(すべての整数の対正の整数のみ)

あなたがこれまでにコードを変更した場合:

$卓上>整数(」括弧t_id ') - > unsigned() - > nullable();

次に、mysqlはリレーションの両側が同じ値型(両側にすべての正の整数の値の範囲)を持つので、リレーションが正しいことを確認します。

副作用として、関係は、型ではなく制約であるため、関係のいずれか一方、または両方の側でnullableにすることができます。

0

外部キーの種類は、参照するフィールドの種類と一致する必要があります。 'id'は署名なしですが、外部キーフィールドは署名されていません。