gpt4 book ai didi

mongodb - Doctrine2 MongoDB ODM 复合键(UniqueEntity)

转载 作者:可可西里 更新时间:2023-11-01 09:14:20 25 4
gpt4 key购买 nike

我在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com