原则和复合唯一键



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

/**
 * @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 DoctrineORMMappingUniqueConstraint;
/**
 * CommonModelEntityVideoSettings
 *
 * @Table(name="video_settings", 
 *    uniqueConstraints={
 *        @UniqueConstraint(name="video_unique", 
 *            columns={"video_dimension", "video_bitrate"})
 *    }
 * )
 * @Entity
 */

请参阅@UniqueConstraint

如果有人想使用 PHP 8 属性而不是教义注释:

use DoctrineORMMapping as ORM;
#[ORMEntity]
#[ORMUniqueConstraint(
  name: 'video_unique_idx',
  columns: ['video_dimension', 'video_bitrate']
)]

我发现只use ORM 然后在注释中前缀ORM更冗长。另请注意,您可以将注释分成几行以使其更具可读性,尤其是在您有几个项目要提及的情况下(以下示例中的索引)。

use DoctrineORMMapping as ORM;
/**
 * VideoSettings
 *
 * @ORMCache(usage="NONSTRICT_READ_WRITE")
 * @ORMEntity(repositoryClass="AppBundleRepositoryVideoSettingsRepository")
 * @ORMTable(name="emails", uniqueConstraints={
 *      @ORMUniqueConstraint(name="dimension_bitrate", columns={"video_dimension", "video_bitrate"})
 * }, indexes={
 *      @ORMIndex(name="name", columns={"name"})
 * })
 */
class VideoSettings
我知道

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

如果您需要的是复合主键,事情实际上要简单得多。(当然,这保证了唯一性)教义文档包含以下网址的一些很好的例子:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

因此,原始示例可能如下所示:

/**
 * @var string $videoDimension
 *
 * @ORMId @ORMColumn(type="string")
 */
private $videoDimension;
/**
 * @var string $videoBitrate
 *
 * @ORMId @ORMColumn(type="string")
 */
private $videoBitrate;

这里有一些注意事项:

  1. 省略了"名称"列,因为教义能够根据属性名称
  2. 由于videoDimensionvideoBitrate都是PK的一部分 - 无需指定nullable = false
  3. 如果需要 - 复合 PK 可能由外键组成,因此请随意添加一些关系映射

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

相关内容

  • 没有找到相关文章

最新更新