【发布时间】:2025-12-29 15:10:11
【问题描述】:
我是 Symfony4 的新手。我有一个与表中设置的值有关的问题。我一直在关注 Symfony 文档。我想将用户的 email 和 codeinvitations 变量存储在邀请表中,但它给了我一个错误。
请帮我解决我的问题。
这些是我的实体
应用/实体/User.php
class User implements UserInterface, \Serializable
{
(...)
/**
* @ORM\Column(type="string", length=255, unique=true)
* @ORM\OneToMany(targetEntity="App\Entity\Invitacion", mappedBy="user")
*/
private $email;
/**
* @ORM\Column(type="string", length=255, unique=true)
* @ORM\OneToMany(targetEntity="App\Entity\Invitacion", mappedBy="user")
*/
private $codeinvitaciones;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Invitacion", mappedBy="user")
*/
private $invitaciones;
/**
* User constructor
*/
public function __construct()
{
$this->invitaciones = new ArrayCollection();
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getCodeinvitaciones(): ?string
{
return $this->codeinvitaciones;
}
public function setCodeinvitaciones(string $codeinvitaciones): self
{
$this->codeinvitaciones = $codeinvitaciones;
return $this;
}
/**
* @return Collection|Invitacion[]
*/
public function getInvitaciones(): Collection
{
return $this->invitaciones;
}
public function addInvitaciones(Invitacion $invitacion): self
{
if (!$this->invitaciones->contains($invitacion)) {
$this->invitaciones[] = $invitacion;
$invitacion->setCodeinvitaciones($this);
}
return $this;
}
}
应用/实体/Invitacion.php
class Invitacion
{
(...)
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="email")
* @ORM\JoinColumn(nullable=false)
*/
private $email;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="invitaciones")
* @ORM\JoinColumn(nullable=false)
*/
private $codeinvitaciones;
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): ?User
{
return $this->email;
}
public function setEmail(?User $email): self
{
$this->email = $email;
return $this;
}
public function getCodeinvitaciones(): ?User
{
return $this->codeinvitaciones;
}
public function setCodeinvitaciones(User $codeinvitaciones): self
{
$this->codeinvitaciones = $codeinvitaciones;
return $this;
}
}
在控制器中,我在表单中注册时创建用户。同时,我将 email 和变量 codeinvitations 存储在 invitation 表中,但它给了我一个错误。
控制器
(...)
$invitacion->setEmail($email);
$invitacion->setCodeinvitaciones($registroInv);
错误
Argument 1 passed to App\Entity\Invitacion::setEmail() must be an instance of App\Entity\User or null,
string given, called in C:\Users\adria\Documents\app\bebeBB\src\Controller\UserController.php on line 38
谢谢
-------------编辑-----------
我已经尝试过传递Invitacion::setEmail(?string),但它给出了这个错误:
Expected value of type "App\Entity\User" for association field
"App\Entity\Invitacion#$codeinvitaciones", got "string" instead.
【问题讨论】:
-
错误是不言自明的,
setEmail需要一个User实例(或 null),你正在传递一个字符串。大概(因为您的控制器代码丢失)您正在执行$email = $user->getEmail();。将Invitacion::setEmail(?User)更改为Invitacion::setEmail(?string)及其映射或传递整个User对象。 -
我已经尝试过传递
Invitacion::setEmail(?string),但它给出了这个错误:Expected value of type "App\Entity\User" for association field "App\Entity\Invitacion#$codeinvitaciones", got "string" instead. -
是的,已经指出了这一点。
Invitacion实体中的$emailmapping 类型为User:@ManyToOne(targetEntity="App\Entity\User")。如果您想要用户表的外键,则必须传递User对象并相应地调整所有调用。如果您不需要引用并且可以使用非规范化数据,请将其更改为string。
标签: symfony doctrine-orm doctrine symfony4