5

我想知道 ff: 代码将往返数据库多少次。

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

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

$recipients是与 ReceivedEmail 具有一对多关系的 User 对象数组

$email是与 ReceivedEmail 具有一对多关系的对象。

例如,如果$recipients有五个实体,那么循环是否会生成总共五次到数据库的行程?还是只有一个?

上面的示例是插入新 ReceivedEmail 记录的最优化方式吗?

谢谢

4

1 回答 1

11

将为每个持久化生成一个 INSERT 语句。

更重要的是,您可以只显示您的 SQL 语句进行调试,只需配置 Doctrine 进行日志记录: https ://stackoverflow.com/a/4585421/1815881

在你的情况下:

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

对于许多插入,您应该考虑批处理

希望我已经揭示了问题。

于 2013-04-18T12:14:19.017 回答