改变注入数据的 ID 的原则



我有一些注入的数据来开始教义。

我的"成员(用户)"表如下所示

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()。

相关内容

  • 没有找到相关文章

最新更新