2012-07-11 146 views
3

我从git仓库中使用了Doctrine MongoDB ODM和Symfony2的master分支以及mongo扩展1.2.10。Doctrine MongoDB ODM nullable = false不起作用

我已经创建了一些类/文件类似于注释:

namespace Acme\StoreBundle\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document 
*/ 
class Person 
{ 
    /** 
    * @MongoDB\Id 
    */ 
    protected $id; 

    /** 
    * @MongoDB\String(nullable=false) 
    */ 
    protected $name; 

    /** 
    * @MongoDB\ReferenceOne(targetDocument="PersonType", inversedBy="person", nullable=false) 
    */ 
    protected $personType; 
} 

当我创建并坚持一个新的文档,而无需设置我收到任何错误的值或引用。我误解了可以使用nullable选项,并且需要在生命周期回调中调用验证代码,错误地使用注释,或者可能是Doctrine中的错误?

+0

当然这是我的谷歌搜索的最后一个链接... [链接](https://github.com/doctrine/mongodb-odm/blob/master/lib/Doctrine/ODM/MongoDB/Persisters /PersistenceBuilder.php) 我假设可空选项与ORM中的工作方式相同,但实际上是控制空值是否存储在数据库中。看起来我必须创建一些验证逻辑来​​执行约束。 – CrEOF 2012-07-11 16:58:32

回答

1

use Symfony\Component\Validator\Constraints as Assert;

/** * @mongodb\Field(name="name", type="string") * @Assert\NotBlank() */ private $name;

希望你得到的线索。

1

如果检出annotation reference,则设置nullable=false并不意味着它将在空值上验证失败。

从文档:

为空的 - 默认情况下,ODM将$unset领域MongoDB中,如果PHP值为null。为此选项指定true以强制ODM将空值存储在数据库中,而不是取消设置该字段。

相关问题