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

Symfony Doctrine2-如何与字符串列建立关系,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个问题,我需要与两个表建立关系,但由于没有常规id,我需要使用strings列。大概是这样的: /** * @ORM\Entity * @ORM\Table(name="sigtap_tb_procedimento") */ class Procedimento { /** * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY")

我有一个问题,我需要与两个表建立关系,但由于没有常规id,我需要使用strings列。大概是这样的:

/**
 * @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\OneToMany(targetEntity="ExcecaoCompatibilidade", mappedBy="procedimento_restricao")
 */
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_procedmento_restrico和co_procedmento_restrico是字符串类型,关系不起作用。如何解决此问题?

您的关系需要引用另一个表中的主键。 也许我误解了你的问题,但你能不能像这样提及这段关系:

/**
 * @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\OneToMany(targetEntity="ExcecaoCompatibilidade", mappedBy="procedimento_restricao")
 */
private $restricoes;
请看这里:

使用一对多关系与原则

使用@ OneToMany的一方总是与原则的POV的关系的反面,可能不是你认为是相反的一方,而且从来没有一个连接列定义。 从类procedmento中删除@JoinColumn注释

@OneToMany必须使用mappedBy和@ManyToOne,拥有方使用inversedBy

联接列或联接表定义必须与@ManyToOne一起位于拥有方

当使用联接列时,将添加到拥有方实体(也称为多方实体)表中的该列的名称将由name=column\u name指定,并且要存储在其中的引用外键是@joincolm注释的referencedColumnName=iddefinition