当前位置: 首页 > 面试题库 >

使用Laravel模式构建和外键“常规错误:1005无法创建表”

太叔永新
2023-03-14
问题内容

本质上,我和这个家伙有同样的问题,要减去表前缀。因为我没有表前缀,所以他的修复不起作用。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_tohas_many)设置了模型,但据我所知这不是问题,这是数据库设置。该数据库
InnoDB。

外键到底在做什么错?


问题答案:

我不是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');
});

希望这有助于/解决您的问题。



 类似资料:
  • 为什么要回复laravel模式 [Illumb\Database\QueryException]SQLSTATE[HY000]:一般错误:1005无法创建表(错误号:150“外键约束格式不正确”)(sql:alter table添加结构

  • 问题内容: 我将我的MySQL数据库插入WAMP服务器时遇到了麻烦。我打算发布模式的图像,但这是我不能的第一篇文章。 下面是执行的脚本。 但是然后我得到这个错误: 我不知道为什么。谁能帮我? 问题答案: 我迅速搜寻了你,它把我带到了这里。我引用: 如果您尝试添加名称已经在其他地方使用的约束,则会收到此消息 要检查约束,请使用以下SQL查询: 在此处查找更多信息,或尝试查看错误发生的位置。看起来像是

  • 问题内容: 尝试在mysql中创建表时出现错误。 有解决的技巧吗? 错误: 问题答案: 查看有关外键约束的MySQL手册: 如果重新创建已删除的表,则该表必须具有符合引用该表的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL将返回错误号1005,并在错误消息中引用错误150。 一些想法: 最好删除表,并使用格式正确的语法对其进行新建

  • 问题内容: 这是我的桌子: 现在,当我尝试导入时出现错误:#1005-无法创建表’kobeco_yii.tbl_comments’(错误号:150)(详细信息:Percona- XtraDB,支持事务,行级锁定和外键) 问题答案: 您正在尝试在其他表之前创建。需要表和用于外键约束。 尝试将for移至其他下方。

  • 我想添加两个表,一个产品表和一个类别表。然后我要将产品表中的一个类别id链接到类别表中的主键。下面是我的代码: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table添加约束外键()引用())

  • 问题内容: 我在Internet上搜索了此问题的解决方案,并检查了Stack Overflow问题,但是没有一种解决方案适合我的情况。 我想创建一个从表sira_no到metal_kod的外键。 该脚本返回: 我尝试将索引添加到被引用的表中: 我在两个表(字符集和排序规则)上都检查了METAL_KODU,但找不到该问题的解决方案。我该如何解决这个问题? 这是metal_kod表: 问题答案: 错误