Я хотел знать, как синхронизировать пользователей, например, в моей таблице пользователей (fos_user). Я хочу синхронизировать имя пользователя с другими таблицами.
Итак, если я хочу узнать, кто является пользователем, оставившим комментарий, я хочу сделать
$commentA->getUser();
и он покажет пользователю пользовательскую таблицу (fos_user), для этого, когда пользователь изменит свое имя пользователя, комментарий получит его новое имя пользователя.
Спасибо за помощь






То, что вы ищете, - это отношения базы данных - 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();