mongodb - Doctrine2 MongoDB ODM 复合键(UniqueEntity)

标签 mongodb doctrine-orm zend-framework2 doctrine-odm

我在使用 MongoDB 在 Zf2 和 Doctrine2 中实现一些在 Symfony2 和 Doctrine2 中相当简单的东西时遇到了问题。

我有一个发票文档,我想在其中确保 Invoice::pattern 和 Invoice::number 的组合是唯一的。一个数字可以出现多次,与图案相同,但图案和发票号的组合应该是唯一的。

Symfony2中我会使用桥

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

@UniqueEntity({"pattern", "number"})
class Invoice
{
...

但由于显而易见的原因,这在 Zf2 中不起作用。

我当前在 Zend Framework 2 中的注释设置是

/**
 * Class Invoice
 * @package Common\Document\Billing
 *
 * @ODM\Document(
 *     collection="invoice"
 * )
 * @ODM\UniqueIndex(keys={"prefix"="asc", "number"="asc"})
 * @ODM\ChangeTrackingPolicy("DEFERRED_IMPLICIT")
 */
class Invoice
{
...

但这实际上允许使用相同的模式和编号保存发票。

最佳答案

恐怕您是在比较苹果和梨。

Doctrine MongoDB ODM

@ODM\UniqueIndex 索引是 Doctrine MongoDB ODM 的一部分.它的目的是在运行控制台命令 odm:schema:create/odm:schema:update 时创建/更新索引。 MongoDB 使用这些索引来加速查找。

创建唯一索引时,MongoDB 将强制执行该唯一性。您可以将其视为一种数据库级别的验证。

因为这一切都是 Doctrine MongoDB ODM 和 MongoDB 本身的一部分,所以您可以在任何您想要的框架中使用它。 Symfony 2 或 Zend Framework 2 在这里没有区别。

用户输入验证

@UniqueEntity 注释是 Symfony 2's Validator Component 的一部分.该组件可以单独使用,但大多数开发人员使用 Form Component ,它又使用 Validator 组件进行表单验证。其目的是验证用户输入。

换句话说:这种验证与 MongoDB 所做的完全不同。 Validator 组件在接收到用户输入时强制执行规则(因此在 数据发送到数据库之前),MongoDB 在尝试存储数据时强制执行数据完整性(因此 数据之后)被发送到数据库)。

ZF2 中的等价物

我认为您正在搜索 Zend Framework 2 中的 @UniqueEntity 注释的等效项。您需要查看 ZF2 Form ,或者至少是 ZF2 Validator .

您可能正在使用 ZF2 DoctrineModule ,或者至少是 ZF2 DoctrineMongoODMModule .看看 validator documentation of ZF2 DoctrineModule看看如何使用它。

关于mongodb - Doctrine2 MongoDB ODM 复合键(UniqueEntity),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462079/

相关文章:

mongodb - 如何将 spring data mongo @CompoundIndex 与子集合一起使用?

javascript - 单击按钮后显示图像

node.js - 带有灰尘的 mongo 中的服务器端渲染

php - 在 Doctrine DBAL 中使用executeQuery 绑定(bind)变量类型时出现问题

php - 未找到类 'Doctrine\Common\Annotations\AnnotationRegistry'

php - DQL 关联和 lat lon 距离

php - Zend 框架 2 : not able to send desired status code in response

mysql - Spring Boot连接Mysql和MongoDb

php - Symfony 2 - 在 preSubmit 事件订阅者上向表单元素添加错误

php - 操作数类型冲突 : text is incompatible with uniqueidentifier