У меня есть одна сущность "Пользователь", и у нее есть другие отношения: "сообщения" и под "сообщениями". У меня есть другое отношение, называемое "комментарии".
Теперь я хочу, чтобы пользователь мог публиковать сообщения вконечная точка выглядит так:
{
"name" : "John Doe",
"posts" : [
{
"Title" : "Main post",
"comments" : [
{
"body" : "Love this post!"
}
]
}
]
}
и, следовательно, позволяют сделать все объекты за один вызов. Дело в том, что все работает достаточно глубоко, до такой степени, что мы должны сохранить часть комментариев.
Я уже пробовал следующее: в модели User я установил «postComments» с помощью следующего конструктора аннотаций.
class User {
/**
* @ORM\OneToMany(targetEntity="App\Entity\Posts", mappedBy="comments", cascade={"persist", "remove"})
*/
private $postComments;
public function __construct()
{
$this->postComments = new ArrayCollection();
}
}
class Post {
/**
* @ORM\OneToMany(targetEntity="App\Entity\Comment", mappedBy="post", cascade={"persist","remove"})
*
* @Assert\Valid
*/
private $comments;
}
И в репозитории я попробовал это:
foreach ($comments as $comment) {
$newComment = $this->commentRepository->create($post,$comment);
$post->getComments()->add($newComment);
}
И я попробовал
$post->setComments($newCommentsArray)
Все выдало те же проблемы, что и конечно. Идентификатор "сообщения" еще не создан, и, следовательно, связь не может быть установлена, но как мы можемрешить и сделать это с Doctrine?
Или есть ограничение
Это вместе создаст следующую проблему:
App\Entity\Comments is missing an assigned ID for field 'postId'. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly.