本质上,我和这个家伙有同样的问题,要减去表前缀。因为我没有表前缀,所以他的修复不起作用。http://forums.laravel.com/viewtopic.php?id=972
我正在尝试使用Laravel的Schema Builder来构建表,如下所示:
Schema::create('lessons', function($table) { $table->increments('id'); $table->string('title')->nullable(); $table->string('summary')->nullable(); $table->timestamps(); }); Schema::create('tutorials', function($table) { $table->increments('id'); $table->integer('author'); $table->integer('lesson'); $table->string('title')->nullable(); $table->string('summary')->nullable(); $table->string('tagline')->nullable(); $table->text('content')->nullable(); $table->text('attachments')->nullable(); $table->timestamps(); }); Schema::table('tutorials', function($table) { $table->foreign('author')->references('id')->on('users'); $table->foreign('lesson')->references('id')->on('lessons'); });
问题是,当我运行此代码(在/ setup路由中)时,出现以下错误:
SQLSTATE[HY000]: General error: 1005 Can't create table 'tutorials.#sql-2cff_da' (errno: 150) SQL: ALTER TABLE `tutorials` ADD CONSTRAINT tutorials_author_foreign FOREIGN KEY (`author`) REFERENCES `users` (`id`) Bindings: array ( )
基于网络上的帖子以及有关如何 设置 Laravel口才关系的有限文档,我不确定自己做错了什么…
users已经存在,并且 确实 有一个id字段是auto_increment。我还用适当的关系(belongs_to和has_many)设置了模型,但据我所知这不是问题,这是数据库设置。该数据库 是 InnoDB。
users
id
auto_increment
belongs_to
has_many
外键到底在做什么错?
我不是100%确定这是否是失败的原因,但要指出几个提示。如果您使用旧版本的mySQL作为数据库,则默认表实现是myISAM,它不支持外键约束。由于脚本无法进行外键分配,因此最好在Schema的create方法中使用此语法明确声明希望将INNODB作为引擎。
Schema::create('lessons', function($table) { $table->engine = 'InnoDB'; $table->increments('id'); $table->string('title')->nullable(); $table->string('summary')->nullable(); $table->timestamps(); });
希望这可以减轻您遇到的问题。
另外,尽管您可以将外键声明为事后的想法,但是我可以在初始模式中创建外键,因为我可以轻松进行检查以确保已设置正确的数据库引擎。
Schema::create('tutorials', function($table) { $table->engine = 'InnoDB'; $table->increments('id'); $table->integer('author'); $table->integer('lesson'); $table->string('title')->nullable(); $table->string('summary')->nullable(); $table->string('tagline')->nullable(); $table->text('content')->nullable(); $table->text('attachments')->nullable(); $table->timestamps(); $table->foreign('author')->references('id')->on('users'); $table->foreign('lesson')->references('id')->on('lessons'); });
希望这有助于/解决您的问题。