MonthlyReports 无法持久化,因为它与 Orders 表无关
教义事件不与特定实体及其关系耦合。你可以定义一个监听器来做任何你想做的事情。
<service id="your_namespace.entity.listener.monthly_report_recalculator" class="Your\NamespaceBundle\EventListener\MonthylReportRecalculator">
<tag name="doctrine.event_listener" event="prePersist" method="prePersist" priority="80" />
<call method="setContainer">
<argument type="service" id="service_container" />
</call>
</service>
请注意,如果您将存储库注入到学说事件侦听器中,不幸的是,如果您想避免循环依赖,您将不得不从容器中获取它。
<?php
namespace Your\NamespaceBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface;
class MonthylReportRecalculator
{
/**
* @var \Symfony\Component\DependencyInjection\ContainerInterface
*/
private $container;
/**
* Define Container
*
* @param \Symfony\Component\DependencyInjection\ContainerInterface $container
*/
public function setContainer(ContainerInterface $container)
{
$this->container = $container;
}
public function prePersist(LifecycleEventArgs $event)
{
$entity = $event->getEntity();
if ( ! $entity instanceof Order) {
return;
}
// grab the report repository from container
// update your report entity
// save via repository
}
}
我还建议您在 Report 实体中定义 Order 实体的集合以进行审计。