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

时间:2016-12-12 13:37:02

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

我有一张桌子organizations。该表有一个主id(int 10,unsigned,AUTO_INCREMENT)。

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

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

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

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

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或   更新子行:外键约束失败   (myDBorganizations,CONSTRAINT   organizations_main_organization_id_foreign外国钥匙   (main_organization_id)REFERENCES organizationsid))(SQL:   插入organizationsmain_organization_id)个值   ())

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

我的$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;。这可能吗?

感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

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

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

希望这有帮助!