1

我有以下问题,我需要与两个表建立关系,但没有常规 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 是字符串类型,关系不起作用。我该如何解决这个问题?

4

2 回答 2

0

使用与学说的一对多关系

使用的一面@OneToMany始终是学说 pov 关系的反面(可能不是认为的反面),并且永远没有连接列定义。

从 中删除@JoinColumn注释class Procedimento

@OneToMany必须使用mappedBy并且@ManyToOne拥有方)使用inversedBy

连接列(或连接表)定义必须与@ManyToOne.

当使用连接列时,该列的名称(将被添加到拥有方实体的表中,也就是“多”方)将由 指定,name="column_name"并且要存储的引用外键referencedColumnName="id"@JoinColum注解。


于 2013-06-26T15:39:29.827 回答
0

您的关系需要引用另一个表中的主键。可能是我误解了你的问题,但你不能像这样引用 id 列关系:

/**
 * @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

于 2013-06-26T14:40:45.197 回答