在 Symfony 2.2.1 中使用 Doctrine mongo ODM 1.0.0-BETA8,我在 CRUD 的更新部分遇到了麻烦。在persist()
复制新的嵌入文档时。
我运行了与学说 odm 附带的嵌入式文档相关的 phpunit 测试,它们似乎工作正常。我注意到 Doctrine 测试文档和我的文档之间的不同之处在于嵌入文档中存在 id。据我所知,子文档中的 id 是不必要的,测试套件用户和电话号码中的文档证明了这一点。Phonenumber 没有 id 并且测试通过。
我正在从 yaml 生成我的文档,如下所示:
App\AppBundle\Document\Lexicon:
db: somedb
collection: somecollection
fields:
id:
type: id
id: true
interpretations:
embedded: true
type: many
targetDocument: App\AppBundle\Document\Interpretation
App\AppBundle\Document\Interpretation:
type: embeddedDocument #this looks like a good thing to do
fields:
#id: #when this is commented out, Symfony throws an error
# type: id
# id: true
explanation:
type: string
我不想要解释 id,但没有它 symfony 会抱怨No identifier/primary key specified for Document。虽然我怀疑这是导致问题的原因。
$entity = $dm->getRepository('App\AppBundle\Document\Lexicon')->find($id);
$int = new Interpretation();
$int->setExplanation('first');
$entity->addInterpretation($int);
$dm->persist($entity);
$dm->flush();
这导致 Lexicon 有两种解释:
{
"explanation": "first"
},
{
"_id": ObjectId("517d8040cbad49f001000004"),
"explanation": "first"
}
编辑:我找到了type: embeddedDocument
替换id
节的指令。记得将所有内容与以下内容同步:
php app/console doctrine:mongodb:generate:documents AppAppBundle
php app/console doctrine:mongodb:generate:hydrators
但是仍然看到重复。