Doctrine和复合唯一键

Nik*_*ole 90 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;
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*ole 198

回答问题:

use Doctrine\ORM\Mapping\UniqueConstraint;

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

请参阅@UniqueConstraint

  • 我知道这是老帖子,但@Dimitry K有可能.只需要在@ORM\JoinColumn中使用列名(name ="join_table_id",referencedColumnName ="id",nullable = false).这是'join_table_id'. (4认同)
  • 感谢您的信息〜作为一个注释,如果您解决了自己的问题,虽然您不能立即接受,但通常接受您自己的答案通常是好的形式,因此如果人们正在搜索,则表明有可接受的答案. (3认同)
  • 是否可以使用`-ToOne`关联(外键)来实现? (2认同)

BBe*_*eta 52

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

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\UniqueConstraint(
  name: 'video_unique_idx',
  columns: ['video_dimension', 'video_bitrate']
)]
Run Code Online (Sandbox Code Playgroud)


luc*_*nov 17

我发现它只对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={"nane"})
 * })
 */
class VideoSettings
Run Code Online (Sandbox Code Playgroud)