122

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

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

5 回答 5

250

回答问题:

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

于 2012-09-29T07:57:33.467 回答
24

我发现它只对 ORM 更冗长use,然后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
于 2015-11-12T10:14:15.867 回答
5

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

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\UniqueConstraint(
  name: 'video_unique_idx',
  columns: ['video_dimension', 'video_bitrate']
)]
于 2021-09-03T17:20:49.823 回答
3

我知道这是一个老问题,但我在寻找一种创建复合 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 能够根据属性名称猜测它
  2. 由于videoDimensionvideoBitrate都是 PK 的一部分 - 无需指定nullable = false
  3. 如果需要 - Composite PK 可能由外键组成,因此请随意添加一些关系映射
于 2017-06-08T18:37:25.347 回答
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

于 2020-09-29T09:51:50.320 回答