我是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创建带有两个对象的唯一引用?
答案 0 :(得分:0)
阅读文档章节Composite Primary Keys。
/**
* @ORM\Id
* @ORM\OneToMany(targetEntity="ProductImage", mappedBy="product")
*/
protected $products_Pimgs;
/**
* @ORM\Id
* @ORM\OneToMany(targetEntity="ProductImage", mappedBy="language")
*/
protected $products_Limgs;