外键约束在可为空字段上失败

问题描述 投票:0回答:1

我有一张桌子

organizations
。该表有一个主
id
(int 10,无符号,AUTO_INCRMENT)。

在表

organizations
中,我还有一个指向自身的外键:
main_organization_id
。它具有以下属性:(int 10、无符号、可为空、空:TRUE、默认值: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;
。这可能吗?

感谢您的阅读。

php laravel foreign-keys nullable laravel-query-builder
1个回答
1
投票

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

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

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.