Symfony2 Doctrine - 创建主宽度为两个字段

时间:2014-01-25 11:07:23

标签: symfony doctrine composite-primary-key

我正在试图在我的实体'Grupo'中设置一个主键,它必须由两个字段组成:'id_grupo'和'id_estudiante'。我不知道怎么做。需要帮助。谢谢!

/**
 * @ORM\Entity()
 * @DoctrineAssert\UniqueEntity(fields = {"id_grupo", "id_estudiante", "nombre_grupo"})
 * @DoctrineAssert\
*/
class Grupo
{
    /**
     *  @ORM\Id
     *  @ORM\Column(type="integer")
     *  @ORM\GeneratedValue
    */
    protected $id_grupo;

   /**
     * @ORM\ManyToOne(targetEntity="Estudiante", inversedBy="grupos")
     * @ORM\JoinColumn(name="estudiante_id", referencedColumnName="id")
     **/
    protected $id_estudiante;  // Estudiante propietario del grupo

    /** @ORM\Column(type="string", length=100) */
    protected $nombre_grupo;

}

/**
 * @ORM\Entity()
 * @DoctrineAssert\UniqueEntity(fields = {"id", "guid"})
*/
class Estudiante implements UserInterface
{
    /**
     *  @ORM\Id
     *  @ORM\Column(type="string",length=100)
     *  @Assert\NotBlank(message = "Por favor, indica tu email")
     *  @Assert\Email(message = "El email introducido no es válido",
     *                checkMX=true)
     *  @ORM\ManyToMany(targetEntity="Estudiante", mappedBy="mis_amigos")
    */
    protected $id_estudiante;

    (...)

    /**
     * @ORM\OneToMany(targetEntity="Grupo", mappedBy="id_estudiante")
     **/
    protected $grupos;

}

1 个答案:

答案 0 :(得分:2)

基本上你可以做这样的事情(没有检查所以你需要检查它:)):

/**
 * @ORM\Entity()
 */
class Grupo
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Estudiante")
     */
    private $estudiante;
}

您肯定需要了解Composite and Foreign keys in doctrine documentation