Symfony 4 通过 id 获取用户实体
Symfony 4 get user Entity by id
我正在尝试建立一个简单的多对多关系,目标是将朋友添加到数据库中。
我正在尝试使用我的控制器添加朋友,但我找不到使用 ID 获取用户实体的方法。
按照文档中的示例:
/**
* @Entity
*/
class User
{
/**
* @Id
* @Column(type="integer")
*/
private $id;
/**
* @ManyToMany(targetEntity="User")
* @JoinTable(name="friends",
* joinColumns={@JoinColumn(name="user_a_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="user_b_id", referencedColumnName="id")}
* )
* @var \Doctrine\Common\Collections\ArrayCollection
*/
private $friends;
/**
* Constructor.
*/
public function __construct()
{
$this->friends = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @return array
*/
public function getFriends()
{
return $this->friends->toArray();
}
/**
* @param User $user
* @return void
*/
public function addFriend(User $user)
{
if (!$this->friends->contains($user)) {
$this->friends->add($user);
$user->addFriend($this);
}
}
/**
* @param User $user
* @return void
*/
public function removeFriend(User $user)
{
if ($this->friends->contains($user)) {
$this->friends->removeElement($user);
$user->removeFriend($this);
}
}
还有我的控制器:
/**
* @Route("/addFriends")
*/
public function addFriends()
{
if (isset($_POST['add'])) {
$id = $_POST['id'];
$user = $this->getUser();
$user->addFriend($id);
}
return $this->redirectToRoute('friends');
}
Symfony 要我使用实体实例而不是 $id
:
传递给 App\Entity\User::addFriend()
的参数 1 必须是 App\Entity\User 的实例,给定的字符串,我找不到使用它的方法。
试试这个:
if (isset($_POST['add'])) {
$id = $_POST['id'];
$user = $this->getUser();
$friend = $this->getDoctrine()->getRepository(User::class)->find($id);
$user->addFriend($friend);
}
Here 详细说明了您应该如何使用学说实体
我正在尝试建立一个简单的多对多关系,目标是将朋友添加到数据库中。
我正在尝试使用我的控制器添加朋友,但我找不到使用 ID 获取用户实体的方法。
按照文档中的示例:
/**
* @Entity
*/
class User
{
/**
* @Id
* @Column(type="integer")
*/
private $id;
/**
* @ManyToMany(targetEntity="User")
* @JoinTable(name="friends",
* joinColumns={@JoinColumn(name="user_a_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="user_b_id", referencedColumnName="id")}
* )
* @var \Doctrine\Common\Collections\ArrayCollection
*/
private $friends;
/**
* Constructor.
*/
public function __construct()
{
$this->friends = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @return array
*/
public function getFriends()
{
return $this->friends->toArray();
}
/**
* @param User $user
* @return void
*/
public function addFriend(User $user)
{
if (!$this->friends->contains($user)) {
$this->friends->add($user);
$user->addFriend($this);
}
}
/**
* @param User $user
* @return void
*/
public function removeFriend(User $user)
{
if ($this->friends->contains($user)) {
$this->friends->removeElement($user);
$user->removeFriend($this);
}
}
还有我的控制器:
/**
* @Route("/addFriends")
*/
public function addFriends()
{
if (isset($_POST['add'])) {
$id = $_POST['id'];
$user = $this->getUser();
$user->addFriend($id);
}
return $this->redirectToRoute('friends');
}
Symfony 要我使用实体实例而不是 $id
:
传递给 App\Entity\User::addFriend()
的参数 1 必须是 App\Entity\User 的实例,给定的字符串,我找不到使用它的方法。
试试这个:
if (isset($_POST['add'])) {
$id = $_POST['id'];
$user = $this->getUser();
$friend = $this->getDoctrine()->getRepository(User::class)->find($id);
$user->addFriend($friend);
}
Here 详细说明了您应该如何使用学说实体