2016-09-28 13 views
0

以下の1対多の教義の関連付けを実装しようとしていますが、すべての顧客(主キー:id)が訪問しているため、問題が発生しています。 (主キー:customer_id & visitday)は、(I)はDateTimeオブジェクトは、主キーにすることはできませんので、(データベースに永続化する前に、2000年1月1日からの日数としてvisitday導出しています)訪問テーブルでキャプチャ:Doctrineの1対多の関連付け:複合プライマリキーの問題

エンティティ

class Customer 
{ 
    /** 
    * @ORM\Column(type="integer", options={"unsigned"=true}) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToMany(targetEntity="Visit", mappedBy="visitday") 
    */ 
    protected $visits; 

    public function __construct() 
    { 
     $this->visits = new ArrayCollection(); 
    } 
    /* -- */ 
} 


Class Visit 
{ 

    /** 
    * @ORM\Column(name="customer_id", type="integer", options={"unsigned"=true}) 
    * @ORM\JoinColumn(name="customer_id", referencedColumnName="id") 
    * @ORM\Id 
    */ 
    private $customer; 

    /** 
    * @ORM\Column(type="smallint") 
    * @ORM\ManyToOne(targetEntity="Customer", inversedBy="visits") 
    * @ORM\JoinColumn(name="visitday", referencedColumnName="id") 
    * @ORM\Id 
    */ 
    protected $visitday; 

    /* -- */ 
} 

私の問題は、私の顧客のオブジェクトに、顧客の対応する訪問が設定されていないということです。これは、ドクトリンがルックアップに独自の顧客IDを含める必要があることを認識できないためです。これを修正する方法はありますか?

答えて

0

$ visitday属性をDateTimeに変更することをお勧めします。訪問日のタイムスタンプになります。顧客属性は訪問回数を逆にする必要があります。

/** 
* @ORM\Column(name="customer_id", type="integer", options={"unsigned"=true}) 
* @ORM\ManyToOne(targetEntity="Customer", inversedBy="visits") 
* @ORM\Id 
*/ 
private $customer; 

オプションとして、リレーションシップ顧客を訪問数をManyToManyに変更することができます。だから、あなたは重複した訪問日はありません。

+0

Thanks @ Mike-Kor - 「$ visitday」は必要なもののカテゴリ変数です。 顧客は、その顧客の訪問のみの '$ visitday'整数の配列で' visits'を設定できますか? – Bendy

+0

@Bendy、遅く応答して申し訳ありません。顧客訪問日にアクセスできる訪問エンティティの配列を表すCustomerエンティティに$ visits変数がすでにあります。 –

関連する問題