我有一张桌子
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
)) (SQL: 插入id
(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;
。这可能吗?
感谢您的阅读。
是的,您应该在创建组织时指定字段值,您应该这样做:
$organization = Organization::create(array_merge([
'main_organization_id' => null,
], request()->all()));
希望这有帮助!