У меня есть объект Doctrine2 (называйте его сущностью A) в моем проекте Symfony2. Этот объект имеет отношения ManyToOne с другим объектом (называет его объектом B) в проекте.Doctrine2 Entity PrePersist - обновить другой объект
Объект А имеет свойство статуса, которое является «активным» или «неактивным». В объекте B. разрешено только одно «активное» сущность. Таким образом, если новый объект 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;
}
}
В этом случае, поскольку вы можете перемещаться по соотношению «А», я думаю, что это лучший подход ch (самый простой). , если вам нужно создать несвязанный, eventSubstriber # onflush() будет таким, каким я бы взял. [onflush] (http://docs.doctrine-project.org/en/2.0.x/reference/events.html#onflush) – juanmf