Идентификатор ссылки не обновлен в ассоциации Doctrine

Возможно, я кое-что понял с ассоциацией Доктрины.

У меня первый класс:

  class FitComments
{

/**
* @var integer
*
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="SEQUENCE")
* @ORM\SequenceGenerator(sequenceName="SEQ_FIT_COMMENTS", allocationSize=1, initialValue=1)
*/
private $id;
/**
*
* @ORM\OneToMany(targetEntity="FitCommentsId",mappedBy="comments",cascade={"persist"})
*
*/
private $elements;/****/
public function __construct()
{
$this->elements=new ArrayCollection();
}
public function getElements()
{
return $this->elements;
}
....
}

И еще один класс, список элементов идентификатора, на который в комментариях есть ссылка.

/**
* FitCommentsId
* @ORM\Entity
*/
class FitCommentsId
{

/**
* @var integer
*
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="SEQUENCE")
* @ORM\SequenceGenerator(sequenceName="SEQ_FIT_COMMENTS_ID", allocationSize=1, initialValue=1)
*/
private $id;

/**
*
* @ORM\ManyToOne(targetEntity="FitComments",inversedBy="elements")
* @ORM\JoinColumn(name="COMMENTS_ID",referencedColumnName="ID")
*/
private $comments;

....
}

Я использую :

  $comments=new FitComment();
$commentId=new FitCommentId();
....
$comments->getElements()->add($commentId);
....
$entityManager->persist($comment);
$entityManager->flush();

Но у меня есть ошибка. $ commentId-> comments имеет значение null. Обычно он должен быть заполнен $ comment-> id.

Если я должен заполнить вручную $ commentId-> comments, ассоциация не очень полезна.

Возможно, я не понимаю механизм.

Примечание: SGDB — это Oracle.

0

Решение

Попробуйте сохранить $ commentId также так:

$comment = new FitComment();
$commentId = new FitCommentId();
....
$comment->getElements()->add($commentId);
....
$entityManager->persist($commentId);
$entityManager->persist($comment);
$entityManager->flush();
0

Другие решения

Нет, я не могу сначала сделать «persist» для $ commentId, потому что «persist» для класса $ comment инициирует последовательность Oracle для идентификатора $ comments. (Я не уверен, что это очень чисто, что я говорю ….)

‘commentID-> comments’ является ссылкой на ‘comment-> id’ и не является нулевым.

Сначала я должен создать $ comment, а затем создать $ commentId.

Я знаю, что Doctrine использует Sequence перед сохранением записи в команде persist. Возможно, сначала я смогу сделать персистирование без сброса, а в конце записи $ commentId сделать сброс.

0