Symfony,ODM:如何设置乘法ID注释

问题描述:

所以问题是如何提供两个或更多的标识符键?我找不到在谷歌搜索这个问题的任何答案...这里是例子:Symfony,ODM:如何设置乘法ID注释

class Customer 
{ 
    /** 
    * @ODM\Id 
    * 
    * @JMS\Expose 
    * @JMS\Type("string") 
    * 
    */ 
    protected $id; 

    /** 
    * @var integer 
    * @ODM\Id(strategy="INCREMENT") 
    * 
    * @JMS\Expose 
    * @JMS\Type("integer") 
    * 
    */ 
    protected $customerId; 

因此,在这种情况下,我有增加,因为我写的第二个ID,但第一个ID成为空。如果我删除并只写* @ODM\Field(type="integer")一切正常,但没有增量customerId。那么我怎样才能在文档中找到ID?或者我错了,我不这样做?

标识符自动映射为_id字段,因此只能有一个字段映射为@Id

在过去完成类似的事情,我建议保留\MongoId作为文档标识符,并在代码中生成递增的customerId,而不是依靠ODM来执行此操作。制作这样的生成器非常简单,您需要连接到持久化文档(无论是在您的域代码中,我建议,还是利用事件),并写入类似于ODM的IncrementGenerator的生成器。

你只能有字符串的两个关键一前一整数作为复合键的一部分,按本文件: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

所以尝试:

class Customer 
{ 
    /** 
    * @ODM\Id 
    * @ORM\Column(name="id", type="string") 
    * 
    * @JMS\Expose 
    * @JMS\Type("string") 
    * 
    */ 
    protected $id; 

    /** 
    * @var integer 
    * @ODM\Id(strategy="INCREMENT") 
    * @ORM\Column(name="customerId", type="integer") 
    * 
    * @JMS\Expose 
    * @JMS\Type("integer") 
    * 
    */ 
    protected $customerId; 

我认为应该工作您。

+0

请注意!我不使用ODM,所以ORM符号没有意义,ORM不能实现ODM符号的解决方案。我只使用ODM,只使用mongodb。 –

+1

对不起,您的帖子中有'ORM'的例子,所以我错了。我在网上进行了搜索,我相信ODM原则不支持复合ID。但是,我发现这个链接:http://*.com/questions/7222062/mongodb-composite-key/7225657#7225657这可能会对你有所帮助。如果您认为不合适,我可以删除我的答案,并将该链接中的内容作为答案发布。 –