2017-07-12 8 views
0

私はidとslug(varchar型)列を持つcategoriesテーブルを持っています。categoryテーブルのslugカラムを参照するcategory_slug(varchar型)カラムを持つサブカテゴリテーブルを作成します。LaravelのString/varchar型の列で2つのテーブル間に外部キー関係を作成できますか?

php artisan migrate中にエラーが発生します。

Schema::create('subcategories', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('category_slug')->unique(); 
     $table->integer('product_id'); 
     $table->foreign('category_slug') 
     ->references('slug')->on('categories'); 
     $table->timestamps(); 
    }); 

端末のエラーです。

[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1005 Can't create table laravel_eshopper . #sql-ee8_272 (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table tabpanes add constraint tabpanes_category_slug_foreign foreign key (category_slug) references categories (slug))

[PDOException] SQLSTATE[HY000]: General error: 1005 Can't create table laravel_eshopper . #sql-ee8_272 (errno: 150 "Foreign key constraint is incorrectly formed")

+0

このようなタイプのデータベース設計はなぜですか? –

+0

サブカテゴリテーブルには別の列 'product_id'があります。商品テーブルから商品のIDを格納するpost.whichを編集しました。どの商品がどのカテゴリに属する​​のかを簡単に理解できるようにしたいと思っています。すべてのスラッグがphpmyadminのサブカテゴリテーブルに挿入されるときにドロップダウンとして表示されるので、サブカテゴリテーブルにデータを簡単に挿入するのに役立ちます。 –

+0

なぜ 'subcategories'のために別のテーブルを作成する必要があるのですか?' category'に 'parent_id'を作成することができます。 –

答えて

1

はい確かにそれは以下の例を参照してください行うことができます。

は、あなたが以下のようにあなたのカテゴリテーブルがあるとします。

Schema::create('categories', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('slug')->unique(); 
     $table->timestamps(); 
    }); 

今、あなたは以下のように外部キーとサブカテゴリを作成することができます。

Schema::create('subcategories', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('category_slug')->unique(); 
     $table->foreign('category_slug') 
     ->references('slug')->on('categories')->onUpdate('cascade') 
     ->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
+0

ありがとう!!カテゴリテーブルの私のスラッグの列は一意に定義されていませんでした。 –

関連する問題