独特的指数与学说mongodb odm

baz*_*azo 1 doctrine mongodb doctrine-odm

我正在为我的网站做一个注册系统,并希望防止使用相同的电子邮件地址重复注册.

用户类的声明如下所示:

/**
 * @Document
 */
class User extends BaseEntity
{
    private 
    /**
     * @Id
     */
    $id,

    /**
     * @String @Index(unique=true)
     */    
    $email
;
}
Run Code Online (Sandbox Code Playgroud)

但每当我使用相同的电子邮件保存用户时,不会引发异常,我会得到重复.

我找到了我需要做的地方$ documentManager-> flush(array('safe'=> true)); 但这没有用.

我怎样才能实现我的需要?谢谢

GGG*_*rce 5

我遇到了类似的问题.您可以通过在mongo控制台中键入以下内容来查看Doctrine创建的索引:

db.system.indexes.find()
Run Code Online (Sandbox Code Playgroud)

我必须按照这些说明直接在mongo中创建索引.之后,将不会创建重复项.

但是,Symfony2/Doctrine似乎没有抛出任何异常,插入只是无声地失败.如果直接在控制台中执行,Mongodb会提醒您插入失败的插件.

--edit:一个例外当抛出array('safe'=>true)用作参数来冲洗()按照原来的职位.

  • 我有一个类似的问题,我的索引被忽略,请确保您使用正确的学说任务进行迁移,例如:使用:`php app/console doctrine:mongodb:schema:update` (4认同)
  • 实际上,我发现你需要调用$ schemaTool-> ensureIndexes(); 在创建数据库时.之后它按预期工作 (2认同)