Je veux faire la clé unique composite dans la doctrine. Ce sont mes champs:
/**
* @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;
Comment puis-je montrer la doctrine, que ceux qui sont combinés sont une clé unique composite?
Répondre à la question:
use Doctrine\ORM\Mapping\UniqueConstraint;
/**
* Common\Model\Entity\VideoSettings
*
* @Table(name="video_settings",
* uniqueConstraints={
* @UniqueConstraint(name="video_unique",
* columns={"video_dimension", "video_bitrate"})
* }
* )
* @Entity
*/
Voir @ UniqueConstraint
Je trouve plus verbeux que use
seulement ORM, puis le préfixe ORM
dans les annotations. Notez également que vous pouvez diviser une annotation en plusieurs lignes pour la rendre plus lisible, en particulier si vous avez plusieurs éléments à mentionner (index dans l'exemple ci-dessous).
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
Je sais que cette question est ancienne, mais je l’ai trouvée en cherchant un moyen de créer une PK composite et je pensais pouvoir utiliser une mise à jour.
Les choses sont en réalité beaucoup plus simples si vous avez besoin d’une clé primaire composite. (Ce qui, bien sûr, garantit l'unicité) Doctrine contient quelques exemples intéressants de cette URL: http://docs.doctrine-project.org/projects/doctrine-orm/ en/latest/tutorials/composite-primary-keys.html
Ainsi, l'exemple d'origine pourrait ressembler à ceci:
/**
* @var string $videoDimension
*
* @ORM\Id @ORM\Column(type="string")
*/
private $videoDimension;
/**
* @var string $videoBitrate
*
* @ORM\Id @ORM\Column(type="string")
*/
private $videoBitrate;
Quelques notes ici:
videoDimension
et videoBitrate
font tous les deux partie de la PK, il n’est pas nécessaire de spécifier nullable = false