【发布时间】:2016-10-27 13:34:19
【问题描述】:
我有一个正在使用 for 循环处理的数据源。数据源有时可能有重复项。我正在循环数据源并创建“项目”实体。我试图避免这些重复,但我认为由于这些项目尚未发送到数据库,因此在重复检查期间找不到它们。
这是我的 伪 for 循环:
foreach($datasource['data'] as $post){
$dupe = $em->getRepository('AppBundle:Item')->findOneByDatasourceId($post['id']);
if(!$dupe){
//process the item
$item = new Item();
$item->setDatasourceId($post['id']);
$em->persist($item);
}
}
$em->flush();
这确实会找到重复项。
当数据尚未发送到数据库时,如何查找重复项?我的印象是实体经理会知道尚未推送的数据。
谢谢
【问题讨论】:
-
如果你在坚持后刷新,你有重复吗?当然这不是一个优化的解决方案,但是您可以将插入的 id 存储在本地临时数组中并也可以签入该数组。
-
我认为@Matteo 的解决方案性能最佳,但是您可以在
Item实体中使用UniqueEntity约束,并在persist()之前使用validator服务对其进行验证。
标签: symfony duplicates entitymanager