Laravel迁移的外键问题

时间:2014-03-24 20:37:58

标签: php mysql laravel-4 cartalyst-sentry

我一直在这里寻找答案,但似乎没有任何效果。我已完成Laravel和Sentry 2的基本安装。首先,我已添加此迁移,以将client_id列添加到users表。

Schema::table('users', function(Blueprint $table)
    {
        $table->integer('client_id')->unique;
    });

接下来我在不同的迁移中创建了我的客户表,其中包含以下内容。

Schema::create('clients', function(Blueprint $table)
    {
        $table->increments('id');
        $table->timestamps();
        $table->integer('client_id')->unique;
        $table->string('client_name');
        $table->date('expiry');
        $table->integer('cals');
    });

最后,我创建了一个具有以下内容的迁移。

Schema::table('users', function(Blueprint $table)
    {
        $table->foreign('client_id')
            ->references('client_id')->on('clients')
            ->onDelete('cascade');
    });

我得到的错误如下;

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `users` add constraint use
rs_client_id_foreign foreign key (`client_id`) references `clients` (`client_id`) on delete cascade)

如果它们都是索引,我有点坚持我应该寻找的东西吗?

1 个答案:

答案 0 :(得分:0)

$table->integer('client_id')->unique;

这一行应为:

$table->integer('client_id')->unique();

无论如何,如果您实际上尝试使用'users'表上的外键约束来引用'clients'表中的'id'列,请执行以下操作:

Schema::table('users', function(Blueprint $table)
{
    $table->integer('client_id')->unsigned();

    $table->foreign('client_id')
        ->references('id')->on('clients')
        ->onDelete('cascade');
});

Schema::create('clients', function(Blueprint $table)
{
    $table->increments('id');
    $table->timestamps();
    $table->string('client_name');
    $table->date('expiry');
    $table->integer('cals');
});