-1

我有一些注入数据来启动 Doctrine。

我的会员(用户)表看起来像

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")) 产生一个成员对象,并且_em->contains($defaultMember)是真的。该对象甚至在调试器中显示 ID 为 1。然而,当我进行更改$defaultMember->setFirstName("Default2")并刷新回数据库时,它会尝试插入一个新的(重复的)成员,无论序列中的下一个 id 是什么。

4

2 回答 2

0

通过 id 的 getter/setter 组合解决了问题(不确定这是否是潜在问题),并在存储库中使用 $this->_em 而不是 $this->getEntityManager()。

于 2014-03-06T06:30:12.717 回答
0

我在插入新记录而不是更新现有记录时遇到了类似的问题。我的问题是由$entity2 = clone $entity1. 之后我更新$entity2->name = $newName然后尝试保存它(persist()然后flush())。我希望它会在给出 id 时更新现有记录。但是不,它插入了一条新记录。

在使用 xdebug 跟踪代码后,我发现每个对象都会被索引,spl_object_hash($object)并返回唯一的$object. 如果 id 与被索引的不同,SF2 将尝试插入新记录。

我不知道您是否尝试过保留克隆对象,但我想原因与我的相同。尝试以这种方式进行调查,您可以使其随心所欲地工作。否则,发布更多代码,然后人们可以更轻松地帮助您。

于 2014-03-05T18:18:28.843 回答