首先是简介,如果有更好的方法:我有一个带有* product_id *和 stock 的产品表,其中库存可以大到5000或者10000,我需要创建一个列表(在另一个表中),其中每个项目都有一行,如果a * propduct_id *有库存1000 我将有1000行与此* product_id *,此外,此列表必须是随机的。
我选择了一个PHP(symfony2)解决方案,因为我发现如何根据库存获得随机单个product_id,甚至如何随机订购产品列表,但我没有找到如何通过库存“乘以”这些行
现在,主要问题: 所以,在PHP中,它并不那么困难,获取product_id列表,通过库存和随机播放“倍增”,问题出现在我想要保存时:
$em->flush
,我会在一段时间后得到内存溢出$em->flush
,则需要很长时间才能保存这是我保存的代码,也许你可以改进:
foreach ($huge_random_list as $indice => $id_product)
{
$preasignacion = new ListaPreasignacion();
$preasignacion->setProductId($id_product);
$preasignacion->setOrden($indice+1);
$em->persist($preasignacion);
if ($indice % 100 == 0) $em->flush();
}
$em->flush();
使用最终解决方案进行编辑基于@Pazi建议:
$conn = $em->getConnection();
foreach ($huge_random_list as $indice => $id_product)
{
$conn->executeUpdate("insert into product_list(product_id, order) "
." values({$id_product}, {$indice})");
}
答案 0 :(得分:3)
我建议放弃教义ORM并为此目的使用DBAL连接和纯SQL查询。我总是在我的应用程序中这样做,我必须在短时间内存储大量数据。 Doctrine在对象,检查和脱水方面增加了太多的开销。您可以通过DI容器检索DBAL连接。例如在控制器中:
conn = $this->get('database_connection');