Symfony OneToOne 关系无法获取用户实体中的数据



我得到了 2 个实体用户和配置文件。用户类代码:

/**
 * @var Profile
 *
 * @ORMOneToOne(targetEntity="Profile", inversedBy="user")
 */
private $profile;
/**
 * @param Profile $profile
 * @return $this
 */
public function setProfile($profile)
{
    $this->profile = $profile;
    return $this;
}
/**
 * @return Profile
 */
public function getProfile()
{
    return $this->profile;
}

配置文件类代码:

/**
 * @var User
 *
 * @ORMOneToOne(targetEntity="User", mappedBy="profile")
 * @ORMJoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;
/**
 * @param User $user
 * @return $this
 */
public function setUser($user)
{
    $this->user = $user;
    return $this;
}
/**
 * @return User
 */
public function getUser()
{
    return $this->user;
}

现在,在配置文件实体中的数据库中,我有user_id,在用户实体中,我有profile_id,但是当我在用户实体中添加配置文件时,profile_id为空。在配置文件类中user_id是可以的,但在用户profile_id中设置为空,有人可以帮助我吗?

正如前面的回答者所说 - 你不应该同时设置它。所以决定你想要哪一边。

一对一关系基本上是相同的一对多关系,唯一的区别是在"映射"侧,条目不能超过一次。

您那里有 2 个选项。将配置文件设置为用户或将用户设置为配置文件。

1(如果在开始时创建用户然后创建配置文件 - 您应该将二传手/getter放在配置文件侧

2(如果一开始你先创建配置文件,然后创建用户,你应该在用户端放置二传手/getter。

你不需要在一对一关系中映射/反转...

检查以下工作代码示例。(所以我们将在配置文件实体端放置二传手/getter(

/**
 * One Profile has One User.
 * @ORMOneToOne(targetEntity="User")
 * @ORMJoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;
public function setUser(User $user)
{
   $this->user = $user;
}
public function getUser()
{
   return $this->user();
}

附言。总的来说,我认为你试图通过这种关系使一些简单的事情变得困难。为什么不只创建一个实体?为什么这里需要两个一对一的关系?

你不应该在两边都设置它 - 因为Profile已经inversedBy它是拥有方 - 因此结果在你的数据库中。

您的 getter 和 setter 仍然可以正常工作 - user_id注释上的JoinColumn正在处理关系,profile_id实际上并没有在任何地方指定,并且在您的数据库中是多余的。

相关内容

  • 没有找到相关文章

最新更新