【问题标题】:Laravel Migration Foreignkey ErrorLaravel 迁移外键错误
【发布时间】:2019-01-31 07:28:17
【问题描述】:

Laravel 5.6 运行于: PHP 7.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 服务器版本相对应的手册,了解在 lin 的 ') on delete cascade' 附近使用的正确语法 e 1 (SQL: alter table user_roles add constraint user_roles_role_id_foreign foreign key (role_id) references roles () on delete cascade)

Laravel 抛出的错误

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

2 PDO::prepare("修改表user_roles添加约束user_roles_role_id_foreign外键(role_id)在删除级联时引用roles()") C:\xampp\htdocs\order-project\vendor\laravel\framework\src\Illuminate\Database\Connection.php:452

【问题讨论】:

  • 其他表/迁移可以正常运行吗?所以设置没有问题?
  • 试试:$table->Integer('role_id')->unsigned()
  • 似乎 Laravel 出于某种原因忽略了->references('id')。没有级联,它可以工作吗?
  • @utdev 是的,所有其他迁移都运行没有任何错误。 @AlvaroAlves,我已经尝试过了,它给出了类似“ PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table order-project.#sql-3228_8a (errno: 150 "Foreign key constraint is格式不正确“)”)“@Phiter不,它也不起作用。顺便说一句,Php Storm 说“在 Illuminate\Support\Fluent 中找不到方法'引用'”,但我认为这是关于 IDE 而不是关于 laravel,因为当我使用 VSC 时没有这样的错误。跨度>
  • 您可以在stackoverflow.com/questions/31263637/… 之后进行测试,这会将您的迁移查询作为原始 sql 查询返回。只是为了确保查询是正确的

标签: php laravel laravel-5


【解决方案1】:

试试这个

$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');

【讨论】:

  • 它对我不起作用,我收到如下错误:一般错误:1005 无法创建表 order-project.#sql-410_a (errno:150 "外键约束格式不正确" )")
【解决方案2】:

我认为你对这个帖子有类似的问题Laravel foreign key onDelete('cascade') not working

希望对你有帮助

【讨论】:

  • 谢谢,但它也不起作用。错误是:errno: 150 "外键约束格式不正确")
  • 您是否按照问题中的建议将引擎更改为 InnoDB?
【解决方案3】:

我解决了这个问题。它失败是因为 Laravel 试图在角色表之前迁移 user_roles 表。我只是在 user_roles 表之前迁移角色表,它就成功了!在解决方案规则表没有抛出错误但尚未完全创建之前。

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2018-09-22
    • 2016-07-06
    • 2015-08-14
    • 2015-03-02
    • 2019-02-09
    • 2016-02-10
    • 2020-01-16
    • 2019-10-19
    相关资源
    最近更新 更多