2

在 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

但是仍然看到重复。

4

0 回答 0