2012-09-28 64 views
67

我想在教義中做複合唯一鍵。 這些都是我的領域:學說和複合獨特鍵

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

我怎麼能證明學說,這些組合在一起是複合唯一鍵?

回答

146

回答這個問題:

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

+3

謝謝你的信息〜 請注意,如果您解決了自己的問題,但無法立即接受,那麼接受您自己的答案通常是一種很好的方式,但如果人們正在搜索答案,則表明答案是可以接受的。 – Rixius

+2

是否有可能通過'-ToOne'關聯(外鍵)來實現? –

+2

我知道這是舊帖子,但是@Dimitry K有可能。只需要在@ORM \ JoinColumn(name =「join_table_id」,referencedColumnName =「id」,nullable = false)中使用列名即可。這裏是'join_table_id'。 – herr

14

我覺得它更詳細到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 
1

我知道這是一個老問題,但我碰到它在尋找一種方法來創建複合PK,並認爲這可以利用一些更新。

如果你需要的是複合主鍵,事情實際上要簡單得多。 (其中,當然,保證唯一性)原則文檔中包含一些很好的例子通過這個網址: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. 列「名」,因爲教義是省略是它能夠基於 屬性名
  2. 由於videoDimension和猜測是PK的兩個部分 - 沒有必要指定nullable = false
  3. 如果需要的話 - 綜合PK可以由外鍵,可以隨意添加一些關係映射
+0

你所做的是一個複合主鍵。確定這將是唯一的,但它是一個主鍵...;) – Preciel

+0

嗯,是的,我想我已經在我的答案中提到過:)實際上,如果他沒有在「OP」中使用「唯一索引」這個術語,這意味着要創建PK(這就是接受的答案)。但是由於這個問題包含一個奇怪的術語「複合獨特密鑰」 - 我不明白爲什麼我們不能認爲它是一個複合主鍵 - 至少這是我遇到這個問題時一直在尋找的東西。乾杯! –