3 回答
TA贡献1813条经验 获得超2个赞
User和UserProfile实体之间的关系保留在UserProfile::user属性上,但是,当您调用 时User::setProfile(),您并没有设置该属性。
将您的User::setProfile()功能更改为以下内容:
function setProfile(UserProfile $profile): self
{
$profile->setUser($this);
$this->profile = $profile;
return $this;
}
TA贡献1836条经验 获得超5个赞
您的映射无效。验证您的架构 - 缺少mappedBy和inversedBy. 当您修复映射时,这将按预期工作。
在 Symfony 中验证模式:
bin/console doc:sch:val
在采埃孚:
php public/index.php orm:schema-tool:validate
TA贡献2012条经验 获得超12个赞
他们都为解决方案做出了贡献。这最终奏效了:
class User
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $user_id;
/**
* @ORM\Column(type="string")
*/
private $username;
/**
* @ORM\Column(type="string")
*/
private $password;
/**
* @ORM\OneToOne(targetEntity="UserProfile", mappedBy="user", cascade={"persist", "remove"})
* @var UserProfile
*/
private $profile;
//...
public function setProfile(UserProfile $profile) : self
{
$profile->setUser($this);
$this->profile = $profile;
return $this;
}
}
class UserProfile
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="User", inversedBy="profile")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
*/
private $user;
/**
* @ORM\Column(type="string")
*/
private $first_name = '';
/**
* @ORM\Column(type="string")
*/
private $last_name = '';
//...
}
这涉及$user_id从UserProfile实体中删除并向 OneToOne 添加一个 inversedBy 参数。
JoinColumn从实体中删除User并修复设置器,setProfile()以便它$user在 UserProfile 实体上设置。
- 3 回答
- 0 关注
- 235 浏览
添加回答
举报
