Php 在非相关表中插入数据-Symfony2&;博士2
我正在构建一些业务应用程序,假设有两个表Php 在非相关表中插入数据-Symfony2&;博士2,php,symfony,orm,doctrine-orm,Php,Symfony,Orm,Doctrine Orm,我正在构建一些业务应用程序,假设有两个表订单和月度报告这些表没有直接关联(ORM中定义的它们之间没有关系)。 表月度报告存储了所有订单的总金额,并且在记录在订单表中的每次购买后都应更新该表。 我计划使用EventListener postPersist()自动更改MonthlyReports中总金额的值,但我面临这个问题: 条令不允许在使用persist()方法的旁边插入新实体,并且不能持久化月报表,因为它与订单表无关 所以我的问题是如何在每个月初创建一份新的报告,我是否应该在这些表之间创
订单
和月度报告
这些表没有直接关联(ORM中定义的它们之间没有关系)。
表
月度报告
存储了所有订单的总金额,并且在记录在订单
表中的每次购买后都应更新该表。我计划使用
EventListener postPersist()
自动更改MonthlyReports
中总金额的值,但我面临这个问题:
- 条令不允许在使用persist()方法的旁边插入新实体,并且不能持久化
,因为它与月报表
表无关订单
所以我的问题是如何在每个月初创建一份新的报告,我是否应该在这些表之间创建一些虚假的关系,以便能够保存新的月度报告 无法持久化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
}
}
好的,我有一个问题,假设这是一个月的第一天,我想动态插入一份新报告。条令手册说:DQL中不允许使用INSERT语句,因为必须通过EntityManager#persist()将实体及其关系引入持久性上下文。考虑到这一点,我不知道如何使用报表存储库插入新报表。