Позвольте быть сущностью: Статья, с одним атрибутом: заглавие. Нам нужно вставить в базу данных через 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 раз.
Если мы удалим «сброс, которого можно избежать» и раскомментируем сброс, написанный после нескольких вызовов функции, мы будем сохраняются 2 * N раз а также смывать N + 1 раз, это улучшение. (Это будет работать, потому что два разные сохраненные объекты не перекрываются)
Мне интересно, есть ли более оптимизированный способ рассказать доктрине, что делать, например сохраняется 2 * N раз а также промывка 2 раза (один раз для всех заголовков и один раз для всех переведенных заголовков). Что вы думаете об этом?
Задача ещё не решена.
Других решений пока нет …