【发布时间】:2016-07-14 06:14:47
【问题描述】:
我有每 60 秒执行一次的 php worker。工人浏览文章并发布它们。
我有仓库:
public function findAllUnpublished()
{
$query = $this->entityManager->createQuery('SELECT i FROM Extra\Item\Item i
WHERE i.status = :status')
->setParameter('status', ItemStatusEnum::UNPUBLISHED);
return $query->getResult();
}
和门面
public function publishUnpublished()
{
$items = $this->cliRepository->findAllUnpublished();
foreach ($items as $item) {
$item->setPublish(TRUE);
$this->entityManager->persist($item);
}
$this->entityManager->flush();
$this->itemChangedObserver->notifyBatchPublished($items); // this clear cache on web server
return $items;
}
还有被称为门面的工人
public function execute()
{
$this->logger->logMessage(ILogger::DEBUG, 'Start publising');
$items = $this->itemFacade->publishUnpublished();
$itemsIds = array_map(function ($item) {
return $item->getId();
}, $items);
$this->logger->logMessage(
ILogger::DEBUG,
'Published %d items (%s)',
count($items),
implode(', ', $itemsIds)
);
$this->logger->logMessage(ILogger::DEBUG, 'End publising');
return IJob::OK;
}
问题是有时(不是每个回合)工作人员会在图库中复制相关图像。
文章:
/**
* @var \Doctrine\Common\Collections\Collection
*
* @OneToMany(targetEntity="gallery", mappedBy="article", cascade={"persist", "remove"})
* @OrderBy({"position" = "ASC"})
*
*/
private $gallery;
画廊:
/**
* @var \Article
*
* @ManyToOne(targetEntity="Article", inversedBy="gallery")
*/
private $article;
有人遇到过这种情况吗?
【问题讨论】:
标签: php doctrine-orm duplicates flush