Symfony 复合主键外键
我使用Symfony 2从现有数据库实现了一个web应用程序 我已经设置了一个实体,其主键由两个外键组成 例如: 具有复合主键的Entity1:property1(主键)、property2(主键) Entity2主键由两个外键组成:property1(主键FK)、property2(主键FK)、Propertiet3(主键) 我不知道如何实施此关联: 在实体2中,我做:Symfony 复合主键外键,symfony,orm,doctrine-orm,Symfony,Orm,Doctrine Orm,我使用Symfony 2从现有数据库实现了一个web应用程序 我已经设置了一个实体,其主键由两个外键组成 例如: 具有复合主键的Entity1:property1(主键)、property2(主键) Entity2主键由两个外键组成:property1(主键FK)、property2(主键FK)、Propertiet3(主键) 我不知道如何实施此关联: 在实体2中,我做: /** * @ORM\ManyToOne (targetEntity = "Entity1") * @ORM\Joi
/**
* @ORM\ManyToOne (targetEntity = "Entity1")
* @ORM\JoinColumns ({
* @ORM\JoinColumn (name = "property1" referencedColumnName = "property1")
* @ORM\JoinColumn (name = "property2" referencedColumnName = "property2")
* @ORM\Id
* @})
*/
private $entity1;
但我有一个错误:
无法将实体“examplebundle\entity\Entite1”与复合主键映射为另一实体“examplebundle\entity\Entite2#Entite1”主键的一部分
如何正确处理这种与教条的联系
我试图遵循这个例子,但我不明白:
您能否给出两个具有相似案例的实体的示例,特别是如何在这种情况下创建关节。Doctrine2不管理外部复合键以引用具有复合主键的实体 Doctrine2正确管理复合主键的情况主要有:
- OneToMany:关联实体(ArticleAttributes)用作主键、引用实体(Artile)的主键和其他自身字段(attribute)
- ManyToMany:使用元数据连接表
希望这有帮助。我找到了一个解决方法,通过定义一个单独的外键,使用原始外键列作为联接列,解决了这个问题
/** @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;
这是一个有效的例子:
<?php
namespace Project\WorkflowBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="opinion")
*/
class Opinion
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="\Project\WorkflowBundle\Entity\Comision_Proyecto", inversedBy="opiniones")
*/
protected $comision;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="\Project\WorkflowBundle\Entity\Persona", inversedBy="opiniones")
*/
protected $persona;
/**
* @ORM\OneToMany(targetEntity="\Project\WorkflowBundle\Entity\Comentario", mappedBy="opinion")
*/
protected $comentarios;
}
似乎您错了,您通过复合键管理关联。这不是麻烦。问题是,用于关联的键似乎不能同时成为PK的一部分,这是错误写入的:不可能将实体“…”与复合主键映射为另一个实体“…”主键的一部分。
。这种情况下有一个丑陋的解决方案:请正确阅读我的答案,我从来没有说过“条令[不]通过复合键管理关联”,相反,我说的是条令2在某些情况下正确管理复合主键。只有我提到的案例才能由doctrine 2Tanks很好地管理,但如果我设置(例如)$property1、$property2和$property3,这些字段将变为空。删除$foreignObject后,它可以正常工作。有没有办法同时使用这两种方法?
<?php
namespace Project\WorkflowBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="comentario")
*/
class Comentario
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\Column(type="boolean")
*/
protected $privado;
/**
* @ORM\ManyToOne(targetEntity="\Project\WorkflowBundle\Entity\Opinion")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="comision_id", referencedColumnName="comision_id"),
* @ORM\JoinColumn(name="persona_id", referencedColumnName="persona_id")
* })
*/
protected $opinion;
}