我有一个具有ID,名称,邮件等属性的User类。
我正在实现密码恢复过程,因此我创建了带有以下列的password_recovery
表:
这是我的
PasswordRecovery
类别:namespace \UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="password_recovery")
*/
class PasswordRecovery {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $idUser;
/**
* @ORM\Column(type="string")
*/
private $token;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $createdDate;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $expireDate;
/**
* @ORM\Column(type="boolean")
*/
private $expired; }
用户想要恢复密码时,必须输入电子邮件。如果邮件在数据库中,则创建一个
PasswordRecovery
对象并将其存储在数据库中。这就是我的操作方式:(一小部分代码)if (!empty($resetMail))
{
$recovery = new PasswordRecovery();
$token = bin2hex(openssl_random_pseudo_bytes(16));
$recovery->setToken($token);
$userId = $resetMail->getId();
$recovery->setIdUser($userId);
$recovery->setCreatedDate(new \DateTime('now'));
$expiry = (new \DateTime('now + 1day'));
$recovery->setExpireDate($expiry);
$recovery->setExpired(false);
$em = $this->getDoctrine()->getManager();
$em->persist($recovery);
$em->flush(); }
我收到此错误:
Catchable Fatal Error: Argument 1 passed to \UserBundle\Entity\PasswordRecovery::setIdUser() must be an instance of \UserBundle\Entity\User, integer given, called in /home/user/project/src/UserBundle/Controller/AccountController.php on line 553 and defined
为什么?
最佳答案
您需要使用setIdDUser(User)
。这是一个代理对象,因为它是对另一个表(实体)的引用
以同样的方式,当您调用getIdUser()
时,您将再次获得一个代理对象,如果您想要int值,则必须在其上调用getId()
。
关于php - 创建密码恢复表-插入值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898138/