8

doctrine2 には、Web サービスからフィードされた主キーを持つエンティティがあり、自動インクリメントである必要があるインデックスもあります。

mysql で手動で設定できますが、doctrine2 でこれを機能させることはできません。

4

2 に答える 2

21

私が使用columnDefinitionしたINT AUTO_INCREMENT UNIQUE

/**
 * @var integer
 *
 * @ORM\Column(type="integer", name="sequence", nullable=true, columnDefinition="INT AUTO_INCREMENT UNIQUE")
 */
protected $sequence = null;

Doctrine 移行バンドルが生成します

$this->addSql('ALTER TABLE table_name_here ADD sequence INT AUTO_INCREMENT UNIQUE');

編集:この回答は2016年のものであり、もはや有効ではない可能性があることに注意してください。受け入れられた回答を参照してください。

于 2016-01-12T17:02:38.533 に答える
7

自動インクリメントの制限は、使用しているデータベースに関連しています。Mysql 、Mysql_autoincrementでは、使用しているエンジンにも依存します。例:

MyISAM および BDB テーブルの場合、複数列インデックスのセカンダリ列に AUTO_INCREMENT を指定できます。この場合、AUTO_INCREMENT 列の生成値は次のように計算されます。

ここで auto_increment に関する一般的なドキュメントを入手できます

一般に、auto_increment は、識別子インデックスの一部である数値フィールドに予約されています (1 つ以上の列が含まれます)。

したがって、これはmysqlで機能します。

ただし、doctrine の auto_increment は @Id (主キー) に対してのみ許可されているようです

21.2.9. @GeneratedValue

@Id によって注釈が付けられたインスタンス変数の識別子生成に使用される戦略を指定します。この注釈はオプションであり、@Id と組み合わせて使用​​する場合にのみ意味があります。

このアノテーションが @Id で指定されていない場合、NONE 戦略がデフォルトとして使用されます。

必須属性:

strategy: 識別子生成戦略の名前を設定します。有効な値は、AUTO、SEQUENCE、TABLE、IDENTITY、UUID、CUSTOM、および NONE です。例:

?php
/**
 * @Id
 * @Column(type="integer")
 * @GeneratedValue(strategy="AUTO")
 */
protected $id = null;

Doctrine_auto_increment

回避策を見つけて、それについてチケットを投稿することをお勧めします

于 2013-02-19T18:53:02.000 に答える