我是 Symfony2 和 Doctrine 2 ORM 的新手,然后我遇到了复合 FK 关联的问题。
虽然通过单个自动增量 ID 关联 OneToMany-ManyToOne 效果很好,但我在使用相同类型的关联但通过复合 PK 时遇到了很多麻烦。
我想做的是一个反映以下shema的实体结构。
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 创建一个唯一对象,例如这样一个唯一 ID。
例如...
实体ProductData的快照,其中“产品和语言应构成相同的对象:
/**
*
* @ORM\OneToMany(targetEntity="ProductImage", mappedBy="product")
*/
protected $products_Pimgs;
/**
*
* @ORM\OneToMany(targetEntity="ProductImage", mappedBy="language")
*/
protected $products_Limgs;
实体ProductImage的快照,其中 *product_id* 和 *language_id* 构成实体 ProductData 的 FK:
/**
*
* @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 创建具有两个对象的唯一引用?