【发布时间】:2014-12-17 15:05:32
【问题描述】:
我编写了一个 Importer 脚本,它从 csv 文件中读取条目, 并迭代行。为了处理大文件而不损失性能, 我在学说批次(批量)中插入新数据。
我目前的问题是,我有一个“类别”实体,应该扩展它 仅在新条目中。所以我必须检查给定类别名称的条目是否可用。
我的第一个问题是,我已经读到“prePersist”事件将随叫随到 "$entityManager->persist()" 和 "flush" 方法内部 (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#prepersist)。
那么我如何检查事件是否在刷新中? 接下来,如何更新身份数据中的实际实体?
我尝试设置id,但没有任何效果。
<?php
/**
* @return \Doctrine\Commong\Collections\ArrayCollection
*/
public function getCategories()
{
if (null === $this->categories) {
$this->categories = $this->getServiceCategory()->findAll();
}
return $this->categories;
}
public function prePersist(LifecycleEventArgs $event)
{
$entity = $event->getEntity();
$objectManager = $event->getObjectManager();
if ($entity instanceof \Application\Entity\Category) {
$categories = $this->getCategories();
$entityCriteria = // buildCriteria from Entity;
$matched = $categories->matching($entityCriteria);
if ($matched->count() > 0) {
$entity->setId($matched->first()->getId();
}
}
}
所以,我不知道如何更新持久的类别实体? 这是正确的事件,还是应该是其他事件对我的情况有更好的解决方案?
我在 zf2 和教义 2 中开发了导入。
问候
【问题讨论】:
标签: php events doctrine-orm zend-framework2