persist() и flush() внутри цикла - Доктрина

Я хочу знать, сколько раз коды ff: будут совершать круговые поездки в базу данных.

foreach ($recipients as $recipient) {
    $received_email = new ReceivedEmail();
    $received_email->setRecipient($recipient);
    $received_email->setEmail($email);

    $entityManager->persist($received_email);
    $entityManager->flush(); 
}

$recipients представляет собой массив объектов User с отношением "один ко многим" с ReceivedEmail

$email объект с отношением "один ко многим" с ReceivedEmail.

Если, например, $recipients имеет пять объектов, генерирует ли цикл в общей сложности пять поездок в базу данных? Или только один?

Является ли приведенный выше пример наиболее оптимизированным способом вставки новых записей ReceivedEmail?

Спасибо

1 ответ

Решение

Будет создан один оператор INSERT для каждого персистента.

Более того, вы можете просто отобразить свои операторы SQL для отладки, просто настройте Doctrine для ведения журнала: /questions/27331810/kak-otlazhivat-mysqldoctrine2-queries/27331829#27331829

В твоем случае:

$entityManager->getConfiguration()->
                setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());

Для многих вставок вы должны рассмотреть пакетную обработку:

Надеюсь, я обнаружил проблему.

Другие вопросы по тегам