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 關注
- 176 瀏覽
添加回答
舉報