我在使用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
{
...
但实际上这确实允许使用相同的模式和编号保留发票。
答案 0 :(得分:2)
我担心你在这里将苹果与梨进行比较。
@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,而ZF2 Form又使用Validator组件进行表单验证。其目的是验证用户输入。
换句话说:这种验证与MongoDB完全不同。虽然Validator组件在收到用户输入时强制执行规则(因此在数据发送到数据库之前),但MongoDB在尝试存储数据时强制执行数据完整性(因此在数据之后)被发送到数据库)。
我认为您在Zend Framework 2中搜索等效的@UniqueEntity
注释。您需要查看ZF2 Validator或至少ZF2 DoctrineModule。< / p>
您可能正在使用ZF2 DoctrineMongoODMModule,或者至少使用validator documentation of ZF2 DoctrineModule。请查看{{3}}以了解如何使用此功能。