所以我有三张桌子。客户/网站/用户。客户有很多站点。客户有很多用户。用户/站点属于客户端。挺直的。遗憾的是,我们正在从一个认为使用字符串密钥是个好主意的人那里导入Site / Client表的信息。
以下是我的迁移 -
这是客户表:
Schema::create('clients', function (Blueprint $table) {
$table->string('id', 25)->primary();
$table->char('number', 6)->unique();
$table->string('name', 50)->unique();
$table->timestamps();
});
这是网站表:
public function up()
{
Schema::create('sites', function (Blueprint $table) {
$table->string('id', 25)->primary();
$table->string('name', 30)->unique();
$table->string('number', 10)->unique();
$table->string('address_1', 60);
$table->string('address_2', 60)->nullable();
$table->string('city', 30);
$table->string('state', 3);
$table->string('postal_code', 10);
$table->string('country', 30);
$table->string('weather_code')->nullable();
$table->decimal('dimension', 18, 0)->nullable();
$table->string('dimension_uom', 10)->nullable();
$table->string('client_id', 25);
$table->softDeletes();
$table->timestamps();
// Belongs To Client
$table->foreign('client_id')->references('id')->on('clients');
});
}
这是用户表:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->string('client_id', 25);
$table->rememberToken();
$table->timestamps();
// Belongs To Client
$table->foreign('client_id')->references('id')->on('clients');
});
}
然而,当我运行这些时,我收到以下错误:
SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:alter table
users
添加约束users_client_id_foreign
外键(client_id
)引用clients
(id
))SQLSTATE [HY000]:常规错误:1215无法添加外键约束
如果我删除了对用户的外键尝试,但是将其保留在网站中则可以正常工作。我在两者中做的完全相同但由于某种原因它在网站而不是在用户中工作。知道为什么吗?
答案 0 :(得分:3)
这里的问题是当您运行迁移user
表时首先创建表,并且在sqwaks之前找不到client
表。因此,请确保在clients
之前运行users
迁移。更改时间戳。
首先进行客户端迁移