Доктрина и составные уникальные ключи
Я хочу сделать составной уникальный ключ в доктрине. Это мои поля:
/**
* @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;
Как я могу показать доктрину, что те, которые объединены вместе, являются составным уникальным ключом?
3 ответа:
ответ на вопрос:
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
Я нахожу его более подробным
use
только ORM, а затем префикс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={"nane"}) * }) */ class VideoSettings
Я знаю, что это старый вопрос, но я наткнулся на него, ища способ создания композитного ПК и думал, что он может использовать некоторые обновления.
на самом деле все намного проще, если вам нужен составной первичный ключ. (Что, конечно же, гарантирует уникальность) документация доктрины содержит несколько хороших примеров по этому 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;
несколько заметок здесь:
- столбец "имя" опущен, так как доктрина может угадать его на основе имя свойства
- С
videoDimension
иvideoBitrate
являются обеими частями ПК - нет необходимости указыватьnullable = false
- если требуется - составной ПК может состоять из внешних ключей, поэтому не стесняйтесь добавлять некоторые реляционные сопоставления