刷新后的EntityNotManaged Exception

时间:2016-09-12 17:53:25

标签: doctrine symfony

我正在编写一个模块来重置我的用户密码。我有一个从LoginHash实体到我的用户实体的ManyToOne关系。

/**
 * @ORM\Entity()
 * @ORM\Table(name="login_hash")
 */
class LoginHash
{

    //properties

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User")
     * @ORM\JoinColumn(onDelete="CASCADE")
     */
    private $user;

    // constructor (takes AppBundle\Entity\User as argument)
    // getters and setters
}

当用户请求重置密码时,我会获取与给定哈希对应的用户。然后我改变User对象并尝试将其刷新到数据库。

public function onSuccess(Request $request)
{
    $login_hash = $this->em->getRepository(LoginHash::class)->findOneBy(['hash' => $this->hash]);
    $user       = $login_hash->getUser();
    $user->setPlainPassword($this->data->getPlainPassword());
    $login_hash->increaseTimesUsed();

    $this->em->flush();
}

这导致异常;

  

实体Doctrine \ ORM \ EntityManager @ 00000000113b253c000000003f7b1f80未受管理。如果实体从数据库中获取或通过EntityManager#persist注册为> new,则对其进行管理   500内部服务器错误 - ORMInvalidArgumentException

我迷路了。我使用单个Entity Managed注入到onSuccess(Request $request)方法所在的同一个类中。而且我不应该坚持这些对象,因为它们首先是从管理器中检索出来的吗?即使我打电话persist($user),也会抛出此异常。

如果我将flush($login_hash)实体作为参数传入,最后我设法$login_hash到数据库。这导致login_hash表中的行得到更新,但不会更新用户表。

我在这里缺少什么?

编辑:

var_dumped 00000000113b253c000000003f7b1f80字符串,实际上是对整个EntityManager对象的引用。

-unitOfWork: UnitOfWork {#288 ▼
    -identityMap: array:2 [▼
        "AppBundle\Entity\LoginHash" => array:1 [▶]
        "AppBundle\Entity\User" => array:1 [▶]

1 个答案:

答案 0 :(得分:0)

你的实体必须有这样的东西:

public function __construct()
{
    $this->user= new ArrayCollection;
}

public function setUser($user)
{
$this->user[]=$user;
}

另外,不要忘记在刷新之前坚持