我已经开始使用 Symfony2 和 MongoDB(Doctrine ODM),并且很难让唯一验证器约束在多个字段上工作(一个字段使用 DBRef 引用另一个 MongoDB 文档)。在我的validation.yml 文件中,我有:
Acme\SomeBundle\Document\ArticlePosition:
constraints:
- Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique:
fields: [position, section]
“position”字段是一个整数,“section”是一个 referenceOne 字段,它指向另一个包中的实体。
当我为此提交表单时,我在分析器中看到以下查询:
db.article_position.find({ "position": 1, "section": "51ff78494fae886b1f7c0f1d" });
db.article_position.insert({ "000000005dc659f30000000082e5d25d": { "_id":ObjectId("5203d1804fae880e801fd12d"), "position": 1, "section": { "$ref": "section", "$id": ObjectId("51ff78494fae886b1f7c0f1d"), "$db": "my_db" } } });
Symfony/Doctrine 看起来他们正在尝试做正确的事情。第一个 find() 查找具有 position 和 section 字段的匹配文档,但它缺少 DBRef 字段($ref、$id、$db)并且总是返回一个空集。
find() 查询应该是这样的:
db.article_position.find({ "position": 1, "section": { "$ref": "section", "$id": ObjectId("51ff78494fae886b1f7c0f1d"), "$db": "my_db" }});
我的学说 YAML 文件如下所示:
Acme\SomeBundle\Document\ArticlePosition
type: document
collection: article_position
referenceOne:
section:
targetDocument: Acme\SomeOtherBundle\Document\Section
fields:
id:
type: id
id: true
position:
type: int
部分文档位于与 ArticlePosition 文档不同的包中。