在Propel事务中有序持久化

时间:2017-10-27 05:45:38

标签: php mysql propel propel2

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

在回调中,我需要保持当前对象/记录,在postInsert方法执行时你会认为是这种情况。然而,这似乎并没有发生(我还没有进入Propel lib进行确认)。我不确定这是否是一个bug /否则,或者它在Propel事务中的事实和持久性在生命周期的后期处理(当然希望不是这样)。

由于这是一个postInsert回调并且之前并没有实际保留,我此时无法强制save(),因为这会导致无限循环。

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

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

如果这不是预期的功能,是否有办法在INSERT的命令中指示Propel在给定的事务中要尊重?

示例代码,如果上述内容不明确:

$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.");
    }
}

0 个答案:

没有答案