Как создать сущность с one-to-many отношением?

Для создания сущности с one-to-many (один-ко-многим) отношением в Symfony вам потребуется выполнить несколько шагов.

1. Определите свою основную сущность (Entity), которая будет иметь one-to-many отношение. Например, пусть это будет сущность "User".

namespace AppEntity;

use DoctrineORMMapping as ORM;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCollection;

/**
 * @ORMEntity(repositoryClass="AppRepositoryUserRepository")
 */
class User
{
    /**
     * @ORMId()
     * @ORMGeneratedValue()
     * @ORMColumn(type="integer")
     */
    private $id;

    // Добавьте остальные поля, необходимые для сущности User

    /**
     * @ORMOneToMany(targetEntity="AppEntityComment", mappedBy="user", cascade={"persist", "remove"})
     */
    private $comments;

    public function __construct()
    {
        $this->comments = new ArrayCollection();
    }

    // Добавьте геттеры и сеттеры для полей сущности User и comments

    /**
     * @return Collection|Comment[]
     */
    public function getComments(): Collection
    {
        return $this->comments;
    }

    public function addComment(Comment $comment): self
    {
        if (!$this->comments->contains($comment)) {
            $this->comments[] = $comment;
            $comment->setUser($this);
        }

        return $this;
    }

    public function removeComment(Comment $comment): self
    {
        if ($this->comments->contains($comment)) {
            $this->comments->removeElement($comment);
            // set the owning side to null (unless already changed)
            if ($comment->getUser() === $this) {
                $comment->setUser(null);
            }
        }

        return $this;
    }
}

2. Определите вторую сущность, которая будет иметь many-to-one (многие-к-одному) отношение с основной сущностью. Например, пусть это будет сущность "Comment".

namespace AppEntity;

use DoctrineORMMapping as ORM;

/**
 * @ORMEntity(repositoryClass="AppRepositoryCommentRepository")
 */
class Comment
{
    /**
     * @ORMId()
     * @ORMGeneratedValue()
     * @ORMColumn(type="integer")
     */
    private $id;

    // Добавьте остальные поля, необходимые для сущности Comment

    /**
     * @ORMManyToOne(targetEntity="AppEntityUser", inversedBy="comments")
     * @ORMJoinColumn(nullable=false)
     */
    private $user;

    // Добавьте геттеры и сеттеры для полей сущности Comment и user

    public function getUser(): ?User
    {
        return $this->user;
    }

    public function setUser(?User $user): self
    {
        $this->user = $user;

        return $this;
    }
}

3. Сгенерируйте миграции для базы данных, чтобы создать таблицы для сущностей "User" и "Comment".

php bin/console make:migration
php bin/console doctrine:migrations:migrate

4. Для работы с этими сущностями, вы можете использовать Doctrine ORM и его методы для получения, сохранения и удаления данных. Например:

// Создание нового пользователя
$user = new User();
$user->setUsername('john_doe');

// Создание нового комментария
$comment = new Comment();
$comment->setText('Hello, world!');
$comment->setUser($user);

// Сохранение пользователя и комментария в базе данных
$entityManager->persist($user);
$entityManager->persist($comment);
$entityManager->flush();

// Получение всех комментариев пользователя
$userComments = $user->getComments();

// Получение пользователя, к которому относится комментарий
$commentUser = $comment->getUser();

Таким образом, вы можете создать сущности с one-to-many отношением в Symfony, используя Doctrine ORM. Это позволяет вам удобно работать с данными и выполнять различные операции связанные с этими сущностями.