我有一些注入的数据来开始教义。
我的"成员(用户)"表如下所示
id | first_name | last_name | email | password ...
注入的数据如下:
INSERT INTO member (id, first_name, last_name, email, password) VALUES (1, "Default", "System", "default@system.com", "system_pass")
跑步$defaultMember = $repository->findOneBy(array("first_name" => "Default"))
生成一个 Member 对象,并且_em->contains($defaultMember)
为真。 该对象甚至在调试器中显示 ID 为 1。 然而,当我进行更改时:$defaultMember->setFirstName("Default2")
并刷新回数据库时,它会尝试插入一个新的(重复的)成员,无论序列中的下一个 id 是什么。
我在插入新记录而不是更新现有记录时遇到了类似的问题。我的问题是由$entity2 = clone $entity1
引起的。之后,我更新了$entity2->name = $newName
然后尝试保存它(持久()然后刷新())。我希望它会在给出 id 时更新现有记录。但是没有,它插入了一条新记录。
使用 xdebug 跟踪代码后,我发现每个对象都将按 spl_object_hash($object)
进行索引,这将返回$object
的唯一 id。如果 id 与索引的 id 不同,SF2 将尝试插入新记录。
我不知道您是否尝试过保留克隆的对象,但我想原因与我的相同。尝试以这种方式进行调查,您可以使其随心所欲地工作。否则,发布更多代码,然后人们可以更轻松地帮助您。
这个问题是通过 id 的 getter/setter 的组合来解决的(不确定这是否是潜在的问题),并在存储库中使用 $this->_em 而不是 $this->getEntityManager()。