我有一个父模型,如果没有至少一个关联的hasMany关系,它必须永远不存在 . 我正在尝试为模型编写验证,以确保永远不会发生这种情况 .
public static function boot()
{
parent::boot();
// reject model with no children
if (count($workflow->children) === 0) {
throw new RuntimeException("need at least one child");
}
});
}
但现在我有鸡和蛋的问题 . 没有父ID,我无法编写子记录 . 在保存验证通过之前,我无法编写父记录 . 但是当我尝试关联子节点并在父模型上调用 - > push()时,我会遇到各种问题,具体取决于我如何将两者联系起来 .
以下导致引用父项的子列上的FK约束失败:
$parent->children->add($child);
$child->parent()->associate($parent);
$parent->push();
Laravel是否太愚蠢无法处理这个(看似合理的)用例?
1 回答
使用Laravel的
DB::beginTransaction()
,DB::commit()
和DB::rollback()
函数可以防止任何杂散信息保存到数据库中 . 采取以下粗略的例子:基本上,使用带有
DB::beginTransaction()
,DB::commit()
和DB::rollback()
的try { ... } catch() { ... }
块,您可以尝试将某些内容保存到数据库中,如果没有捕获异常,DB::commit()
更改 . 如果出现可怕的情况,非常错误,并且将捕获异常,将记录错误消息并使用DB::rollback()
丢弃更改 .希望有所帮助!