【问题标题】:How to set a foreign key to nullable in Laravel如何在 Laravel 中将外键设置为可为空
【发布时间】:2018-07-08 08:43:54
【问题描述】:

我在日志表中设置了一个 user_id,现在有一个问题,我有时需要将日志存储到非登录用户执行的操作中。

当我运行此迁移时

    Schema::table('users_log', function (Blueprint $table) {
        $table->unsignedInteger('user_id')->nullable()->change();
    });

我收到一个错误

[Illuminate\Database\QueryException] SQLSTATE[HY000]:一般错误: 1832 无法更改列“user_id”:用于外键约束 'users_log_user_id_foreign' (SQL: ALTER TABLE users_log CHANGE user_id user_id INT UNSIGNED DEFAULT NULL)

【问题讨论】:

  • 您有一个不允许在 user_id 中使用空值的外键约束。删除约束,你应该没问题。

标签: php mysql laravel


【解决方案1】:

您需要先删除 FK 约束:

$table->dropForeign(['user_id']);

然后修改该列并添加一个新的 FK 约束。

另外,请确保您在单独的 Schema::table() 闭包中执行此操作。

https://laravel.com/docs/5.5/migrations#foreign-key-constraints

【讨论】:

  • @naneri 究竟是什么不起作用?你有没有收到错误或什么?您是否尝试过在一个 Schema::table() 闭包中删除 FK,修改另一个中的列并在另一个中添加另一个 FK?
  • 我会试试的
  • 在我将它们设置在不同的闭包中后它确实起作用了。非常感谢。
  • 能否请您在答案中注意外键约束下降应该在不同的闭包中。
  • @naneri 当然。添加。 )
猜你喜欢
  • 2021-12-02
  • 2022-01-12
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多