我尝试创建一个表并添加外键,但它只创建了表,但它没有添加外键。我收到此错误消息:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'myDB.#sql
-4b4_1a5e43' (errno: 150) (SQL: alter table
形式add constr
aint forms_id_foreign foreign key (
ID为) references
{页{1}}
id`))
我的迁移看起来像这样:
(
我的表public function up()
{
Schema::create('forms', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->string('id')->nullable();
$table->string('url', 100);
$table->string('title', 100);
$table->timestamps();
});
Schema::table('forms', function(Blueprint $table)
{
$table->foreign('id')->references('id')->on('pages');
});
}
没有主键。它应该是forms
列,它是id
表上的外键引用id
。
我已搜索到该问题,并将pages
添加到nullable()
列并
id
迁移但仍无结果。
我哪里错了?感谢。
答案 0 :(得分:0)
<强> EDITED 强>
经过一番锻炼后,我能够找出问题的原因以及如何解决问题。因为它的字符串字段sql允许索引字符串类型的外键。所以在id字段中添加索引。 public function up()
{
Schema::create('forms', function(Blueprint $table)
{
$table->string('id')->nullable()->index();
$table->string('url', 100);
$table->string('title', 100);
$table->timestamps();
$table->foreign('id')
->references('id')
->on('pages');
});
}
以相同的方式索引make table table id列。你说我你没有移民档案。只需转到数据库并将索引添加到 id 字段。之后运行上述迁移。测试和工作正常。如果你为页面创建一个迁移文件,那就像这样 Schema::create('pages', function(Blueprint $table)
{
$table->string('id')->nullable()->index();
.........