symfony - Doctrine 复合主键外键

标签 symfony orm doctrine-orm

我从现有数据库中实现了一个带有 Symfony 2 的 Web 应用程序。

我已经建立了一个实体,其主键由两个外键组成。

例子:

具有复合主键的 Entity1:property1 (PK)、property2 (PK)
Entity2 主键由两个外键组成:property1(PK FK)、property2(PK FK)、propriete3(PK)

我不知道如何实现这个关联:

在 entity2 我做:

/** 
 * @ORM\ManyToOne (targetEntity = "Entity1") 
 * @ORM\JoinColumns ({
 *    @ORM\JoinColumn (name = "property1" referencedColumnName = "property1") 
 *    @ORM\JoinColumn (name = "property2" referencedColumnName = "property2") 
 *    @ORM\Id 
 * @}) 
 */ 
private $entity1; 

但我收到一个错误:

不可能将实体“ExempleBundle\Entity\Entite1”与复合主键映射为另一个实体“ExempleBundle\Entity\Entite2#entite1”的主键的一部分。

如何正确处理这种与 Doctrine 的关联

我试图按照这个例子,但我不明白:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html#use-case-1-dynamic-attributes

您能否举一个具有类似案例的两个实体的示例,尤其是在这种情况下如何进行连接。

最佳答案

我找到了一个解决这个问题的方法,通过定义一个单独的外键,使用原始外键列作为连接列。

/** @Id @Column(...) */
protected $property1;
/** @Id @Column(...) */
protected $property2;
/** @Id @Column(...) */
protected $property3;

/**
 * @ManyToOne(targetEntity="Entity1")
 * @JoinColumns({
 *     @JoinColumn(name="property1", referencedColumnName="property1"),
 *     @JoinColumn(name="property2", referencedColumnName="property2")
 * })
 **/
protected $foreignObject;

关于symfony - Doctrine 复合主键外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717523/

相关文章:

php - Symfony2 强制 twig 输出 XML 格式的数据

symfony - 你什么时候会在 Symfony2 中使用 'Real' 翻译消息?

php - 一对多关系刷新错误

mysql - Doctrine2 One2Many 相关实体过滤结果

php - 从 Symfony 中的路由条件表达式访问全局参数

symfony - 如何在 symfony Assets 中拥有背景图像?

c# - 在 EF Core 中加载集合项 (OwnsMany)

android - 用于移动解决方案的跨平台ORM

c# - Fluent NHibernate 多对多中的 Where 子句

php - Symfony 从数据库生成实体