我有一个while
循环在哪里我创建主要实体Order
,这个实体有很多字段和关联,但坚持快速,非常快。Doctrine2协会坚持缓慢地狱
但它作为一个oneToMany
单向(manyToMany
)关联,这需要永远......这个关联很小,只有两个字段,所以我不知道为什么需要这么长时间。我有一个$items
,正好17项的数组。在while循环中,foreach Order
我在assoc里添加了17个条目。
while($i < 53000)
{
// ...
foreach($item as $k => $v)
{
$item = new Item();
$item->setName($v['name']);
$item->setValue($order[$v['column']]);
$order->addItem($item);
}
// ...
$em->persist($order);
$i++;
if($i % 200 == 0) // I've tried multiples values in here but everything is slow.
{
$em->flush();
$em->clear(); // Commenting this, doesn't speed up things neither.
}
}
我当然知道,每Order
有17 Item
创建的,但作为Item
对象是如此之小,我不认为它需要持续多长时间?
随着Item
forEach
,结束脚本大约需要35分钟。如果我删除,脚本只需要4分钟时间运行,这是荒谬的......
的关系映射如下
manyToMany:
items:
targetEntity: AppBundle\Entity\Item
cascade: ["all"]
joinTable:
name: order_has_item
joinColumns:
product_id:
referencedColumnName: id
inverseJoinColumns:
item_id:
referencedColumnName: id
它是单向的,这样可以创建为Item
没有映射。
我会测试你的东西。顺便说一下,在我做了最后一个$ em-> flish()之后,最后的项目被保存了。 –