创建密码恢复表-插入值时出错


Creating a password recovery table - Error when inserting a value

我有一个User类,它具有id、name、mail等属性。我正在实现密码恢复过程,因此我创建了一个password_recovery表,其中包含以下列:

  • id
  • user_id
  • 标记
  • createdDate
  • expiryDate
  • isExpired

这是我的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()