【发布时间】: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