2014-12-05 2 views
1

У меня есть 2 связанных объекты, как это:Связанного предприятия не слито правильно

class Solicitation { 
    <some fields> 
    /** 
    * @var \User 
    * 
    * @ORM\ManyToOne(targetEntity="User", fetch="EAGER", inversedBy="solicitation") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="id_user", referencedColumnName="id_user", nullable=false) 
    * }) 
    * @OrderBy({"nome" = "ASC"}) 
    */ 
    private $user; 
    <more fields> 
} 

Я не хочу каскада операций. Проблема заключается в том, когда я пытаюсь объединить существующий пользователь перед тем сохраняющимися Solicitation, как это:

$em = $this->getDoctrine()->getManager(); 
if (!(\Doctrine\ORM\UnitOfWork::STATE_MANAGED === $em->getUnitOfWork()->getEntityState($solicitation->getUser()))) { 
    $em->merge($solicitation->getUser()); 
} 
$em->persist($solicitation); 

... это не изменит пользователь UnitOfWork состояние на «УДАЛОСЬ». Я все еще «DETACHED», и я получаю и ошибку при сохранении.

ответ

2

Это заняло у меня целый день, чтобы найти, что

$em->merge($solicitation->getUser()) 

не изменяет исходный объект, он возвращает menaged сущность. Таким образом, правильным является:

$solicitation->setUser($em->merge($solicitation->getUser())); 

затем сохраняются побуждением. Сделал этот вопрос, если кому-то это понадобится.

Смежные вопросы