Pregunta Doctrina y claves únicas compuestas


Quiero hacer clave única compuesta en doctrina. Esos son mis campos:

 /**
     * @var string $videoDimension
     *
     * @Column(name="video_dimension", type="string", nullable=false)
     */
    private $videoDimension;

    /**
     * @var string $videoBitrate
     *
     * @Column(name="video_bitrate", type="string", nullable=false)
     */
    private $videoBitrate;

¿Cómo puedo mostrar la doctrina, que aquellos combinados juntos son una clave única compuesta?


76
2017-09-28 14:11


origen


Respuestas:


Responde la pregunta

use Doctrine\ORM\Mapping\UniqueConstraint;

/**
 * Common\Model\Entity\VideoSettings
 *
 * @Table(name="video_settings", 
 *    uniqueConstraints={
 *        @UniqueConstraint(name="video_unique", 
 *            columns={"video_dimension", "video_bitrate"})
 *    }
 * )
 * @Entity
 */

Ver @UniqueConstraint


159
2017-09-29 07:57



Me parece más detallado use solo ORM y luego prefijo ORM en anotaciones. También tenga en cuenta que puede dividir la anotación en varias líneas para que sea más legible, especialmente si tiene varios elementos para mencionar (indexe en el ejemplo a continuación).

use Doctrine\ORM\Mapping as ORM;

/**
 * VideoSettings
 *
 * @ORM\Cache(usage="NONSTRICT_READ_WRITE")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\VideoSettingsRepository")
 * @ORM\Table(name="emails", uniqueConstraints={
 *      @ORM\UniqueConstraint(name="dimension_bitrate", columns={"video_dimension", "video_bitrate"})
 * }, indexes={
 *      @ORM\Index(name="name", columns={"nane"})
 * })
 */
class VideoSettings

16
2017-11-12 10:14



Sé que esta es una pregunta antigua, pero me encontré con ella mientras buscaba una manera de crear PK compuesto y pensé que podría usar alguna actualización.

Las cosas son mucho más simples si lo que necesitas es una clave primaria compuesta. (Lo cual, por supuesto, garantiza la exclusividad) La documentación de Doctrine contiene algunos buenos ejemplos de esta URL: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

Entonces, el ejemplo original podría verse más o menos así:

/**
 * @var string $videoDimension
 *
 * @ORM\Id @ORM\Column(type="string")
 */
private $videoDimension;

/**
 * @var string $videoBitrate
 *
 * @ORM\Id @ORM\Column(type="string")
 */
private $videoBitrate;

Algunas notas aquí:

  1. La columna "nombre" se omite porque Doctrine puede adivinarla en función de el nombre de la propiedad
  2. Ya que videoDimension y videoBitrate son ambas partes del PK - no hay necesidad de especificar nullable = false
  3. Si es necesario, el Composite PK puede estar compuesto por claves externas, así que no dude en agregar algunas asignaciones relacionales

1
2018-06-08 18:37