当前位置: 首页 > 知识库问答 >
问题:

Laravel迁移外键错误

奚修伟
2023-03-14

Laravel5.6运行于:PHP7.2,MariaDB 10.3

当我想为我的表设置外键时,我只是不断地犯这个错误。

在其他表中,由Laravel本身定义的所有id变量和无符号自动增量

所以,我的迁移是这样的:

public function up()
{

    Schema::create('user_roles', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('role_id');
        $table->unsignedInteger('user_id');

        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

错误如下所示:

SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在LINE 1(SQL:alter tableuser\u rolesadd constraintuser\u roles\u id\u foreign外键(role\u id)参考roles

Laravel引发的错误:

1 PDOException::(“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以了解使用near的正确语法”)关于删除级联的“第1行”C:\xampp\htdocs\order project\vendor\laravel\framework\src\light\Database\Connection.php:452

2 PDO::prepare(“alter tableuser\u rolesadd constraintuser\u roles\u role\u id\u foreign外键(role\u id)referencesroles()on delete cascade”)C:\xampp\htdocs\order project\vendor\laravel\framework\src\illighted\Database\Connection.php:452

共有3个答案

郭辉
2023-03-14

我解决了问题。它失败是因为Laravel试图在角色表之前迁移user_roles表。我只是迁移角色表之前的user_roles表和它的工作!在解决方案规则表之前,没有抛出错误,但它没有完全创建。

沈龙光
2023-03-14

我想你也有类似的问题,这篇文章的外键onDelete('cascade')不起作用

希望这能有所帮助

东门深
2023-03-14

试试这个

$table->integer('role_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
 类似资料:
  • 我有两个表,事务表和付款表,它们在过去的迁移中已经存在。当我试图在它们之间建立一个透视表时,只会得到事务外键的一个错误。“payments”表上的另一个外键创建得很好。这绝对让我感到困惑,我之前关于这个错误的讨论都没有解决这个问题。 错误(参考,MAccounting是数据库的名称): *尽管错误似乎说,payment_transaction表创建成功,以及支付表的外键;唯一中断的是交易的外键。

  • 我花了一整天的时间试图弄清楚下面的迁移发生了什么。 这是表的迁移。我的想法是使用“id_stays_abroad”和“user_id”作为外键。 这是添加外键的另一个迁移 当我运行php artisan迁移时,我遇到了以下错误: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table

  • 这是通过使用包含以下内容的SQL转储移植旧项目来学习Laravel(特别是v5.x)的一种尝试: 在垃圾堆的底部有一个与此特定表格相关的: 来自一对stackoverflow问题1、2、3;我修改了原始代码,将Schema::table的外键从Schema::create中拆分出来,并将unsigned()添加到每个字段: 但在使用新创建的空DB进行迁移时,仍然会出现错误: 根据MySQL,这意味

  • 我有多个迁移,但我认为与这个问题相关的两个迁移是“作业”和“会话”迁移。 作业迁移

  • 我创建了一个名为用户的表。有一些表被称为公司、名称、部门。我想添加company_id,designation_id,department_id列到用户表作为外键。 我试过了,但没用 当我迁移迁移时,它会显示此错误。 Illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1005无法创建表(错误号:150“外键约束格式不正确”)(SQL:alter

  • 我想在用户表中添加一个外键: 一个用户有一个城镇(法语为ville),一个城镇可以有多个用户: 我的村庄(城镇)迁移 我重命名了迁移(我不知道这样做是否有好处?),这是我迁移的顺序,正如您所看到的,我在用户之前创建了villes: 我在终端中发现了这个错误: 照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1072键列“villes\u id”在表中不存在(SQL:al