将外键添加到表

时间:2015-04-17 14:46:11

标签: mysql laravel

我想在laravel中的sql数据库中的表中添加一个外键。但添加后我得到以下错误:

  [Illuminate\Database\QueryException]                                                                                                                                                                   
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `userroles` add constraint userroles_user_id_foreign foreign key (`user_id`) references `users` (`user_id`))  

我要添加此密钥的表是:

public function up()
{
    Schema::create('userroles', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('user_id');
        $table->foreign('user_id')->references('user_id')->on('users');
        $table->string('role_id');
        $table->timestamps();

    });
}

我所指的表格:

public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('user_id');
        $table->string('name');
        $table->smallInteger('is_responder')->default(0);
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->rememberToken();
        $table->timestamps();
    });
}

名称和类型相同。还有什么可以得到错误?

更新 users表中的字段“user_id”将是专门为每个用户创建的GUID。这是我想在其他表中引用的字段。这可能吗?那么,据我所知,我需要将此字段设为PK吗?

1 个答案:

答案 0 :(得分:3)

您可以为id表的users列创建外键。

而不是:

$table->string('user_id');
$table->foreign('user_id')->references('user_id')->on('users');

使用:

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');