2016-07-07 35 views
0

我有一個表已經在我的數據庫中創建2鍵,一個PRI鍵,另一個MUL鍵。我如何告訴Doctrine以MUL鍵作爲鍵標記列?如果我理解正確,@ID將不起作用,因爲它不是主鍵,並且@Index不起作用,因爲表已經創建。在Doctrine 2中,如何將列標記爲非主鍵?

的代碼目前看起來是這樣的:

/** 
* @ORM\Entity 
* @ORM\Table(name="mytablename") 
**/ 
class MyTablename implements IMyTablename 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="string", name="id", length=40) 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", name="ccode", length=5) 
    */ 
    protected $ccode; 

    ... 

} 

而且我想,以紀念CCODE作爲重點。

+0

如果您不希望Doctrine的SchemaTool管理您的表模式,那麼指示Doctrine的索引有什麼意義?學說不會使用這些信息。 – marc

+0

@marc你是什麼意思?我不熟悉Doctrine如何使用ID標記,但我知道它甚至在創建表之後使用Column標記來解析來自表的輸入,例如,日期與日期時間。 – Miryafa

+0

您能否詳細說明「@Index不會工作,因爲表已經創建」? – marc

回答

1

學說允許您通過@Index註釋來定義索引(UNIQUE,INDEX,甚至自Doctrine 2.5以來的FULLTEXT)。由於每個實體必須使用PRIMARY密鑰,因此它有一個特殊的@Id註釋。就這樣。

但是既然你已經在你的問題中提到過了,我想對MUL鍵的真正作用有一個誤解,一個基本的INDEX。特別是,這種類型的索引只涉及性能,並且實體無法正確工作(當然,性能問題除外)。我鼓勵你閱讀更多有關索引的文獻或澄清你的問題。

+0

你能指點我說的文獻嗎?我讀到的學說文件沒有提到任何這些。 – Miryafa

+0

你會發現[這裏](http://stackoverflow.com/questions/707874/differences-between-index-primary-unique-fulltext-in-mysql)一個很好的書面描述可用的不同索引。如果你想了解更多細節,MySQL官方文檔有專門的[優化和索引]部分(https://dev.mysql.com/doc/refman/5.7/en/optimization-indexes.html)。 – marc

+0

謝謝。只是要清楚,你說沒有辦法爲已經創建的表定義非主索引,是嗎? – Miryafa