1

我正在尝试在 Propel 中使用生命周期回调,postInsert. 我遇到的问题是,由于 INSERT 的持久性排序和数据库 FK 约束,存在先有鸡/先有蛋的场景。

在回调中,我需要保留当前对象/记录,您认为在postInsert执行方法时会出现这种情况。然而,这似乎并没有发生(我还没有深入研究 Propel 库来确认)。我不确定这是否是一个错误/否则,或者它在 Propel 事务中并且持久性在生命周期的后期处理(当然希望不是这种情况)。

由于这是一个postInsert回调并且它实际上并没有在之前被持久化,所以我现在无法强制 a save(),因为这会导致无限循环。

除了通过强制持久性来重构所有代码以独立处理它之外,我已经没有想法了。

首先,有人可以确认事务中的持久性是否应该发生在 a 之前postInsert,从而使自动递增的主键值可用?

如果这不是预期的功能,有没有办法指示 Propel 在给定事务中尊重的 INSERT 顺序?

如果上述内容不清楚,则示例代码:

$con = Propel::getConnection()
$con->beginTransaction();
$foo = new \Foo();
$foo->save();
$con->commit();

Foo模型

class Foo extends BaseFoo
{
    public function postInsert()
    {
        if (!$this->getId())
            throw new Exception("id is not available.");
    }
}
4

0 回答 0