2017-02-13 8 views
0

質問は2つ以上の識別子キーを提供する方法ですか? Symfony、ODM:乗算idsの注釈を設定する方法

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

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

だからこのケースでは、私は私が書いたようにインクリメント第2のIDを持っているが、最初のIDがnullになった:私はここでは一例です... Google検索でこの質問上の任意の答えを見つけることができませんでした。私が取り除き、ちょうど * @ODM\Field(type="integer")を書くならば、すべてはOKですが、増分は customerIdではありません。だから私はどのようにドキュメント内のIDにすることができますか?または私は間違っていると私はこれをしないのですか?

答えて

1

識別子は自動的に_idフィールドとしてマップされるため、@Idとしてマップされるフィールドは1つだけです。

これまで似たようなことをやっていて、\MongoIdを文書識別子にしておき、ODMに頼るのではなくコードにcustomerIdをインクリメントすることをお勧めします。そのようなジェネレータを作成するのはかなり簡単です。永続的なドキュメント(あなたのドメインコードに入れてください、助言するか、prePersistイベントを利用する)に接続し、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 cantのソリューションはODM表記に実装されます。私はODMのみを使用し、mongodbのみを使用します。 –

+1

申し訳ありませんが、あなたの投稿に「ORM」の例がありましたので間違いました。私はオンラインで検索しましたが、ODMのDoctrineは複合Idをサポートしていないと考えています。しかし、私はこのリンクを見つけました:http://stackoverflow.com/questions/7222062/mongodb-composite-key/7225657#7225657これはあなたの役に立つかもしれません。それが不適切だと思ったら、私は自分の答えを取り除き、答えとしてそのリンクにあるものを投稿することができます。 –

関連する問題