私は Symfony2 と Doctrine 2 ORM が初めてで、複合 FK 関連付けで問題が発生しました。
単一の自動インクリメント ID による OneToMany-ManyToOne の関連付けはうまく機能しますが、同じ種類の関連付けで複合 PK を介して多くの問題が発生しました。
私がやりたいのは、以下のスキーマを反映するエンティティ構造です。
http://imageshack.us/photo/my-images/9/z07m.jpg (申し訳ありませんが、投稿に画像を挿入することはできません)
どこ
prd_product_data.product_id
prd_product_data.language_id
「prd_product_data」のPKを一緒に構成し、
prd_product_image.pdoduct_id
prd_product_image.language_id
テーブル「prd_product_data」にリンクされた FK を構成します。
以下のこれら
prd_product_image.pdoduct_id
prd_product_image.language_id
prd_product_image.file_image_id
すべて一緒に、「prd_product_image」の PK を構成します。
Doctrine 2.1 以降は、構成された PK - FK 関連付けをネイティブにサポートしていると読みましたが、例はほとんどありません。さらに、ウェブでサーフィンをしていると、似たような状況の断片が散らばっているだけで、何の役にも立たないことがわかりました。現在の主な問題は、このような一意の ID のように、2 つの ID に対して 1 つの一意のオブジェクトを作成できないことです。
例えば...
製品と言語が同じオブジェクトを構成するエンティティProductDataのスナップショット:
/**
*
* @ORM\OneToMany(targetEntity="ProductImage", mappedBy="product")
*/
protected $products_Pimgs;
/**
*
* @ORM\OneToMany(targetEntity="ProductImage", mappedBy="language")
*/
protected $products_Limgs;
*product_id* と *language_id* がエンティティ ProductData の FK を構成するエンティティProductImageのスナップショット:
/**
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="ProductData", inversedBy="products_Pimgs")
* @ORM\JoinColumn(name="product_id", referencedColumnName="product_id")
*/
protected $product;
/**
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="ProductData", inversedBy="products_Limgs")
* @ORM\JoinColumn(name="language_id", referencedColumnName="language_id")
*/
protected $language;
/**
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="FileImage", inversedBy="files_images")
* @ORM\JoinColumn(name="file_image_id", referencedColumnName="id")
*/
protected $file_image;
これらのスナップショットから、これらのキーが個別に機能していることは明らかです。
最後に、これは作曲家から取られた私のドクトリン バージョンです。
"doctrine/orm": ">=2.2.3,<2.4-dev",
ORM を使用して 2 つのオブジェクトで一意の参照を作成するにはどうすればよいですか?