在 symfony 3 中插入多行很慢
insert multiple rows is slow in symfony 3
我正在 symfony 中插入多行。我的代码插入非常缓慢。有没有人有任何想法对我没有帮助!谢谢!
$manager = $this->getContainer()->get('doctrine')->getEntityManager();
// data : object
foreach ($data as $value) {
$entitty = $stkModel->getRepository()->findOneBy(['phone' => $value->getPhone()]);
if ($entity) {
$stk = $stkModel->getEntity();
$stk->setName('mina');
$stk->setStatus(1);
$manager->persist($stk);
$manager->flush();
}
if ($stk) {
$entitty = $titleModel->getRepository()->findOneBy(['stkId' => $stk->getId()]);
$title = $titleModel->getEntity();
$title->setName('dev');
$title->setOrder(2);
$manager->persist($title);
$manager->flush();
}
// Here I take $title->getId();
}
首先,您只需要在使用 new
创建的实体上调用 persist
。但这不会给你速度性能。
flush
每次使用它都会减慢应用程序的速度,因为这里的查询将被发送到数据库。要加快您的应用程序,您必须尽量减少 flush
的使用。在您的情况下,只需在更新实体后执行一个 flush
。
$manager = $this->getContainer()->get('doctrine')->getEntityManager();
// data : object
foreach ($data as $value) {
$entitty = $stkModel->getRepository()->findOneBy(['phone' => $value->getPhone()]);
if ($entity) {
$stk = $stkModel->getEntity();
$stk->setName('mina');
$stk->setStatus(1);
// $manager->persist($stk); <-- Don't need persist here because your object is coming out from the entity manager
}
if ($stk) {
$entitty = $titleModel->getRepository()->findOneBy(['stkId' => $stk->getId()]);
$title = $titleModel->getEntity();
$title->setName('dev');
$title->setOrder(2);
// $manager->persist($stk); <-- same as mention above
}
}
// call flush once at the end
$manager->flush();
在某些情况下,您需要在 foreach 的每个循环中调用 flush。如果您需要查询它,可能会发生这种情况。但在你的情况下,你只是搜索一个 id,它并没有改变。
我正在 symfony 中插入多行。我的代码插入非常缓慢。有没有人有任何想法对我没有帮助!谢谢!
$manager = $this->getContainer()->get('doctrine')->getEntityManager();
// data : object
foreach ($data as $value) {
$entitty = $stkModel->getRepository()->findOneBy(['phone' => $value->getPhone()]);
if ($entity) {
$stk = $stkModel->getEntity();
$stk->setName('mina');
$stk->setStatus(1);
$manager->persist($stk);
$manager->flush();
}
if ($stk) {
$entitty = $titleModel->getRepository()->findOneBy(['stkId' => $stk->getId()]);
$title = $titleModel->getEntity();
$title->setName('dev');
$title->setOrder(2);
$manager->persist($title);
$manager->flush();
}
// Here I take $title->getId();
}
首先,您只需要在使用 new
创建的实体上调用 persist
。但这不会给你速度性能。
flush
每次使用它都会减慢应用程序的速度,因为这里的查询将被发送到数据库。要加快您的应用程序,您必须尽量减少 flush
的使用。在您的情况下,只需在更新实体后执行一个 flush
。
$manager = $this->getContainer()->get('doctrine')->getEntityManager();
// data : object
foreach ($data as $value) {
$entitty = $stkModel->getRepository()->findOneBy(['phone' => $value->getPhone()]);
if ($entity) {
$stk = $stkModel->getEntity();
$stk->setName('mina');
$stk->setStatus(1);
// $manager->persist($stk); <-- Don't need persist here because your object is coming out from the entity manager
}
if ($stk) {
$entitty = $titleModel->getRepository()->findOneBy(['stkId' => $stk->getId()]);
$title = $titleModel->getEntity();
$title->setName('dev');
$title->setOrder(2);
// $manager->persist($stk); <-- same as mention above
}
}
// call flush once at the end
$manager->flush();
在某些情况下,您需要在 foreach 的每个循环中调用 flush。如果您需要查询它,可能会发生这种情况。但在你的情况下,你只是搜索一个 id,它并没有改变。