Doctrine2 - 如何与字符串列建立关系

时间:2013-06-26 14:18:45

标签: symfony doctrine-orm

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

2 个答案:

答案 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定义。