Doctrine和复合唯一键

时间:2012-09-28 14:11:53

标签: php mysql doctrine-orm

我想在学说中做复合唯一键。 这些是我的领域:

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

我如何展示学说,那些组合在一起的是复合唯一键?

4 个答案:

答案 0 :(得分:184)

回答问题:

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

答案 1 :(得分:16)

我发现ListViewItem仅对ORM更加详细,然后在注释中添加use前缀。另请注意,您可以将注释拆分为多行以使其更具可读性,尤其是如果您有几个要提及的项目(在下面的示例中为索引)。

ORM

答案 2 :(得分:1)

我知道这是一个老问题,但我在寻找创建复合PK的方法时遇到了它,并认为它可以使用一些更新。

如果您需要的是复合主键,事情实际上要简单得多。 (当然,这保证了唯一性)Doctrine文档包含了一些很好的例子: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都是PK的一部分,因此无需指定nullable = false
  3. 如果需要 - 复合PK可能由外键组成,因此可以随意添加一些关系映射

答案 3 :(得分:0)

XML版本:

<unique-constraints>
    <unique-constraint columns="column1,column2" name="give_some_explicit_name" />
</unique-constraints>

文档中的更多详细信息:
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/xml-mapping.html#defining-indexes-or-unique-constraints