当我按照@OneToOne
和@JoinColumn
的Doctrine文档创建两个ORM实体类,然后尝试刷新持久化操作时,出现以下错误:
关联字段“ App \ Entity \ LoginObject#$ username”的类型为“ App \ Entity \ UserObject”的预期值,改为使用“字符串”。
我尝试传递带有用户名的字符串,并传递用户对象的ORM实体对象实例,该实例会产生一个错误,表明登录对象需要一个字符串。无论哪种方式,我都无法做到这一点。 UserObject保存用户记录。 LoginObject保存登录事件时间戳,用户名是用户表中的外键。
// UserObject.php:
class UserObject
...
/**
* @ORM\Column(type="text", unique=true)
*/
private $username;
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
...
// LoginObject.php:
/**
* @ORM\OneToOne(targetEntity="UserObject")
* @ORM\JoinColumn(name="username", referencedColumnName="username")
*/
private $username;
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
我的预期结果是希望将登录对象作为新条目插入数据库中,但是事实并非如此,任何建议都会有所帮助。谢谢。
答案 0 :(得分:1)
根据事物的外观,您不太了解the documentation。我建议您再读一遍,但是要慢一些;)将它与以下内容进行比较:
class User {
// make this the primary key (@ORM\ID)
private $id;
/**
* @ORM\OneToOne(targetEntity="Login", mappedBy="user")
*/
private $login;
public function getLogin(): ?Login
{
return $this->login;
}
public function setLogin(Login $login): self
{
$this->login = $login;
return $this;
}
// ...
}
class Login {
// make this the primary key (@ORM\ID)
private $id;
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="login")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
/**
* @ORM\Column(type="string", nullable=false, unique=true)
*/
private $username;
public function getUser(): ?User
{
return $this->user;
}
public function setUser(User $user): self
{
$this->user = $user;
return $this;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
// extra
public function __invoke(): string
{
return $this->getUsername();
}
// ...
}
答案 1 :(得分:0)
IIRC,您需要在LoginObject中将$ username设置为UserObject的实例,而不是字符串。
检出this page in the Symfony docs。