Mysql 是否可以在Laravel中String/varchar类型列的两个表之间创建外键关系?

Mysql 是否可以在Laravel中String/varchar类型列的两个表之间创建外键关系?,mysql,database,laravel,laravel-5,laravel-5.4,Mysql,Database,Laravel,Laravel 5,Laravel 5.4,我有一个类别表,它有一个id和一个slug(varchar类型)列。我想创建一个子类别表,它将有一个列category_slug(varchar类型),该列将引用类别表中的slug列 我在php artisan迁移期间遇到错误 Schema::create('subcategories', function (Blueprint $table) { $table->increments('id'); $table->string('catego

我有一个类别表,它有一个id和一个slug(varchar类型)列。我想创建一个子类别表,它将有一个列category_slug(varchar类型),该列将引用类别表中的slug列

我在php artisan迁移期间遇到错误

    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();
  });
终端中的错误如下所示

[Illumb\Database\QueryException]SQLSTATE[HY000]:一般错误: 1005无法创建表
laravel\u eshopper
<代码>#sql-ee8_272(错误号: 150“外键约束格式不正确”)(SQL:alter table
tabpanes
add constraint
tabpanes\u category\u slug\u foreign
foreign 键(
category\u slug
)引用
categories
slug

[PDOException]SQLSTATE[HY000]:一般错误:1005无法创建 表
laravel\u eshopper
<代码>#sql-ee8_272(错误号:150“外键 约束格式不正确“)


是的,您当然可以这样做,请参见下面的示例:

假设您的类别表如下所示:

  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();
  });

是的,您当然可以这样做,请参见下面的示例:

假设您的类别表如下所示:

  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();
  });

为什么会有这种类型的数据库设计?子类别表中有另一列“product_id”。我编辑了该帖子。该帖子存储了产品表中产品的id。我希望看到子类别表的任何人都能轻松理解哪个产品属于哪个类别。外键关系将帮助我在子类别中插入数据表很容易,因为在从phpmyadmin插入子类别表时,所有的slug都将作为下拉列表出现。为什么需要为
子类别创建另一个表,您可以在
类别中创建
parent\u id
。为什么要进行这种类型的数据库设计?在子类别表中还有另一列“product\u id”。我已经编辑了这篇文章。它存储了产品表中的产品id。我希望看到子类别表的任何人都能轻松了解哪些产品属于哪个类别。A外键关系将帮助我轻松地在子类别表中插入数据,因为在从phpmyadmin插入子类别表时,所有的slug都将作为下拉列表。为什么需要为
子类别创建另一个表
,您可以在
类别
中创建
父id
。谢谢!!类别表中我的slug列定义不唯一。谢谢!!类别表中我的slug列的定义不唯一。