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
}
}
我還建議您在報表實體中定義一個Order實體的集合,以用於審計目的。
好的,我有一個問題,假設這是一個月的第一天,我想隨時插入一個新的報告。 Doctrine手冊說:在DQL中不允許使用_INSERT語句,因爲實體及其關係必須通過EntityManager#persist()引入到持久化上下文中。http://docs.doctrine-project.org/zh-cn/latest/reference/ dql-doctrine-query-language.html #digital-of-dql-queries。考慮到這一點,我不確定如何使用報告庫插入新報告。 – phpsherpa