2017-02-13 106 views
0

所以問題是如何提供兩個或更多的標識符鍵?我找不到在谷歌搜索這個問題的任何答案...這裏是例子: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?或者我錯了,我不這樣做?

回答

1

標識符自動映射爲_id字段,因此只能有一個字段映射爲@Id

在過去完成類似的事情,我建議保留\MongoId作爲文檔標識符,並在代碼中生成遞增的customerId,而不是依靠ODM來執行此操作。製作這樣的生成器非常簡單,您需要連接到持久化文檔(無論是在您的域代碼中,我建議,還是利用事件),並寫入類似於ODM的IncrementGenerator的生成器。

0

你只能有字符串的兩個關鍵一前一整數作爲複合鍵的一部分,按本文件: 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://stackoverflow.com/questions/7222062/mongodb-composite-key/7225657#7225657這可能會對你有所幫助。如果您認爲不合適,我可以刪除我的答案,並將該鏈接中的內容作爲答案發布。 –