当几个对象必须刷新两次时,最优化的持久/刷新策略是什么?

时间:2015-03-10 12:53:43

标签: php optimization doctrine-orm flush

让我们成为一个实体:文章,其中包含一个属性:标题。我们需要通过Doctrine ORM将一系列 标题 翻译标题 插入数据库。

PS:翻译的标题将由可翻译的标题传播到第二个表格中。我们不需要了解有关此扩展程序的更多信息。我们只需要知道一个对象必须刷新两次(或在两个不同的时刻)才能正确插入数据库。

因此,我们想告诉学说插入数据库N标题及其翻译:

$this->createAndPersistArticle("1-some title in english",  "1-un titre en français")
$this->createAndPersistArticle("2-another funny title",    "2-un drôle de titre")
...
$this->createAndPersistArticle("N-last but not least",     "N-le dernier mais pas des moindres")
//$this->getManager()->flush();

使用此功能:

private function createAndPersistArticle($title, $translatedTitle) {
    $anArticle = new Article();
    $anArticle->setTitle($title);
    $this->getManager()->persist($anArticle);
    $this->getManager()->flush();

    $anArticle->setTranslatableLocale('fr');
    $anArticle->setTitle($translatedTitle);
    $this->getManager()->persist($anArticle);
    $this->getManager()->flush(); // flush that can be avoided
}

使用此代码,我们持续2 * N次刷新2 * N次

如果我们删除了可以避免的" flush"并且在多次调用函数后取消注释刷新,我们持续2 * N次刷新N + 1次,这是一个改进。 (它会起作用,因为两个不同的持久对象不会重叠)

我想知道是否有更优化的方式告诉学说要做什么,例如持续2 * N次刷新2次(所有游戏一次)和一次所有翻译的标题)。你对此有何看法?

0 个答案:

没有答案