[php] 교리 및 복합 고유 키

교리에서 복합 고유 키를하고 싶습니다. 그게 내 분야입니다.

/**
 * @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;

함께 결합 된 것이 복합 고유 키라는 교리를 어떻게 보여줄 수 있습니까?



답변

질문에 답하세요:

use Doctrine\ORM\Mapping\UniqueConstraint;

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

@UniqueConstraint 참조


답변

useORM에만 더 장황한 다음 ORM주석에 접두사 를 추가했습니다. 또한 특히 언급 할 항목이 여러 개인 경우 주석을 여러 줄로 분리하여 읽기 쉽게 만들 수 있습니다 (아래 예제의 색인).

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={"name"})
 * })
 */
class VideoSettings


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 복합 PK를 만드는 방법을 찾는 동안 발견했으며 약간의 업데이트를 사용할 수 있다고 생각했습니다.

필요한 것이 복합 기본 키인 경우 실제로 훨씬 간단합니다. (물론 고유성을 보장하는) Doctrine 문서에는 다음 URL에 의한 몇 가지 멋진 예제가 포함되어 있습니다. http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

따라서 원래 예제는 다음과 같을 수 있습니다.

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

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

여기에 몇 가지 참고 사항 :

  1. Doctrine은 속성 이름을 기준으로 추측 할 수 있으므로 “name”열은 생략됩니다.
  2. 이후 videoDimensionvideoBitrate약동학의 두 부분이 있습니다 – 지정할 필요가 없습니다nullable = false
  3. 필요한 경우-Composite PK는 외래 키로 구성 될 수 있으므로 관계형 매핑을 자유롭게 추가 할 수 있습니다.


답변