Symfony 3: Как синхронизировать пользователей с помощью Doctrine

Я хотел знать, как синхронизировать пользователей, например, в моей таблице пользователей (fos_user). Я хочу синхронизировать имя пользователя с другими таблицами.

Итак, если я хочу узнать, кто является пользователем, оставившим комментарий, я хочу сделать

$commentA->getUser();

и он покажет пользователю пользовательскую таблицу (fos_user), для этого, когда пользователь изменит свое имя пользователя, комментарий получит его новое имя пользователя.

Спасибо за помощь

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
152
2

Ответы 2

То, что вы ищете, - это отношения базы данных - OneToMany / ManyToOne в доктрине - см. В документации - https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/association-mapping.html#one-to-many-bidirectional

Затем вы используете свой первичный ключ в качестве ключа подключения, а не имя пользователя.

Я думаю тебе нужно что-то вроде этого,

В вашем классе User вам понадобятся эти property и methods:

/**
 * Class User
 * @ORM\Table(name = "`user`")
 */
class User extends FosUser
{
    [Your other properties]

    /**
     * @var Collection
     *
     * @ORM\OneToMany(targetEntity = "Comment", mappedBy = "user")
     */
    protected $comments;

        /**
     * User constructor.
     */
    public function __construct()
    {
        parent::__construct();
        $this->comments = new ArrayCollection();
    }

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

    /**
     * @param Comment $comment
     */
    public function addComment(Comment $comment): void
    {
        if ($this->getComments()->contains($comment)) {

            return;
        } else {

            $this->getComments()->add($comment);
            $comment->setUser($this);
        }
    }

    /**
     * @param Comment $comment
     */
    public function removeComment(Comment $comment): void
    {
        if (!$this->getComments()->contains($comment)) {

            return;
        } else {

            $this->getComments()->removeComment($comment);
            $comment->setUser(null);
        }
    }
}

И в вашем классе Comment вам понадобятся эти property и methods:

/**
 * Class User
 * @ORM\Table(name = "`comment`")
 */
class Comment
{
    [Your other properties]
    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity = "User", inversedBy = "comments")
     */
    protected $user;

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

    /**
     * @param User $user
     */
    public function setUser(User $user): void
    {
        /** Maybe you need this too, if get exception delete this line */
        $user->addComment($this);
        $this->user = $user;
    }
}

Возможно, вам нужен cascade = {"persist"} в аннотации в классе пользователя или классе комментариев ... в зависимости от вашей логики.

что-то вроде этой строки

 * @ORM\OneToMany(targetEntity = "Comment", mappedBy = "user", cascade{"persist"})

теперь ваши комментарии связаны с пользователем-владельцем, и если пользователь изменится, также зафиксируйте изменение пользователя, и вы должны использовать класс пользователя следующим образом:

$comment->getUser()->getUsername();

Другие вопросы по теме