【问题标题】:Foreign key constraint fails on nullable field可空字段的外键约束失败
【发布时间】:2017-04-27 09:28:42
【问题描述】:

我有一张桌子organizations。此表有一个主要的id(int 10,无符号,AUTO_INCREMENT)。

在表organizations中,我还有一个自己的外键:main_organization_id。这具有以下属性:(int 10, unsigned, nullable, empty:TRUE, default:NULL)。

每当我创建一个新组织时:

  $organization = Organization::create($request->all());

我的请求中没有main_organization_id,它会失败并出现以下错误:

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (myDB.organizations, 约束 organizations_main_organization_id_foreign 外键 (main_organization_id) 参考organizations (id)) (SQL: 插入organizations (main_organization_id) 值 ())

但是为什么会失败呢?该字段可以为空,这是否意味着我必须在请求中将main_organization_id 隐式设置为null

我的$fillable

 protected $fillable = [
        'main_organization_id',
    ];

我的迁移:

Schema::table('organizations', function (Blueprint $table) {

    $table->integer('main_organization_id')->unsigned()->nullable();
    $table->foreign('main_organization_id')->references('id')->on('organizations');
});**strong text**

我想在创建我的新行之前阻止这样的代码:$request['main_organization_id'] = null;。这可能吗?

感谢您的阅读。

【问题讨论】:

  • 您能否从 SQL 错误中检查您的请求 ($request->all()) 中的内容,它似乎为空或仅传递了单个字段 - main_organization_id
  • 如果您通过表单发送 main_organization_id 字段,您可以在模型上创建一个“setter”方法来检查空值并将它们转换为 null

标签: laravel foreign-keys nullable laravel-query-builder


【解决方案1】:

是的,您应该在创建组织时指定字段值,您应该这样做:

$organization = Organization::create(array_merge([
    'main_organization_id' => null,
], request()->all()));

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 2013-03-04
    • 2016-08-17
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多