我的Symfony2项目中有一个Doctrine2实体(称为实体A)。该实体与项目中的另一个实体(称为实体B)具有ManyToOne关系。
实体A具有“活动”或“非活动”状态属性。实体B中只允许一个“活动”实体A.因此,如果将新实体A添加到现有实体B,则具有“活动”状态的先前实体A需要更新为“非活动”。
实现这一目标的最佳方法是什么?
我正在考虑LifeCycle方法(prePersist),但我怀疑这是否有效,因为它是另一个实体,它比我坚持的实体更新。
代码示例:
class EntityA
{
const ACTIVE = 'active';
const INACTIVE = 'inactive';
private $id;
private $status;
private $entityB;
public function prePersist()
{
$currentEntityA = $this->entityB->getCurrentEntityA();
if ($currentEntityA) {
$currentEntityA->setStatus(self::INACTIVE);
}
}
}
class EntityB
{
private $id;
private $name;
private $entityA;
public function getCurrentEntityA()
{
foreach($this->entityA as $row){
if ($row->getStatus() == EntityA::ACTIVE ) {
return $row;
}
}
//no entityA found so return null
return null;
}
}
答案 0 :(得分:1)
在这种情况下,您应该使用prePersist
侦听器/订阅者而不是LifecycleCallbacks。
在文档章节中了解更多相关信息 - How to register Event Listeners/Subscribers。
btw订阅者被doctrine.event_subscriber
标记(目前缺少文档章节)。
答案 1 :(得分:1)
您可以使用多种方法
在您的情况下,我认为更好地使用服务并将业务逻辑转移到那里