我有以下问题,我需要与两个表建立关系,但没有常规ID,我需要使用字符串列。像这样:
/**
* @ORM\Entity
* @ORM\Table(name="sigtap_tb_procedimento")
*/
class Procedimento
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="ExcecaoCompatibilidade", mappedBy="procedimento_restricao")
* @ORM\JoinColumn(name="co_procedimento_restricao", referencedColumnName="co_procedimento")
*/
private $restricoes;
}
另一个实体
/**
* @ORM\Entity
* @ORM\Table(name="sigtap_rl_excecao_compatibilidade")
*/
class ExcecaoCompatibilidade
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Procedimento", inversedBy="restricoes")
* @ORM\JoinColumn(name="co_procedimento_restricao", referencedColumnName="co_procedimento")
*/
private $procedimento_restricao;
}
co_procedimento_restricao和co_procedimento_restricao是字符串类型,该关系不起作用。我该如何解决这个问题?
答案 0 :(得分:0)
您的关系需要引用另一个表中的主键。 可能是我误解了你的问题,但你不能像这样引用id collumn:
/**
* @ORM\OneToMany(targetEntity="ExcecaoCompatibilidade", mappedBy="procedimento_restricao")
*/
private $restricoes;
/**
* @ORM\ManyToOne(targetEntity="Procedimento", inversedBy="restricoes")
* @ORM\JoinColumn(name="co_procedimento_restricao", referencedColumnName="id")
*/
private $procedimento_restricao;
看看这里: http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html
答案 1 :(得分:0)
使用@OneToMany
的一方始终是来自教条的pov的关系的反方面(可能不是你认为是反面)并且从来没有连接列定义。
从@JoinColumn
删除class Procedimento
注释。
@OneToMany
必须使用 mappedBy ,而@ManyToOne
(拥有方面)使用 inversedBy 。
join-column(或join-table)定义必须与@ManyToOne
一起属于拥有者。
当使用join-column时,此列的名称(将添加到拥有方实体的表中,又称为“many”的一侧)将由name="column_name"
指定,并且引用的外键为存储在referencedColumnName="id"
注释的@JoinColum
定义。