1

私はSymfony2とDoctrineのアノテーションを使用してテーブル間の参照を作成しています。テーブルを作成すると、次のようになります。

CREATE TABLE `guardian` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fos_user_id` int(11) NOT NULL,
  `first_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `last_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_644860558C20A0FB` (`fos_user_id`),
  CONSTRAINT `FK_644860558C20A0FB` FOREIGN KEY (`fos_user_id`) REFERENCES `fos_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

これを行う方法は、コードでこれらのアノテーションを作成してから、次のコマンドを実行することです。

php app/console doctrine:schema:update --force

参照の1つの注釈は次のとおりです。

/**
 * @ORM\OneToOne(targetEntity="SF\UserBundle\Entity\User")
 * @ORM\JoinColumn(name="fos_user_id", referencedColumnName="id")
 */
private $fosUser;

「showcreatetable」からわかるように、上記のように、キーの名前と制約は人間にやさしいものではありません。「UNIQ_644860558C20A0FB」は単なる「UNIQ_」であり、ランダムに何かを追加していると思います。

私がやりたいのは、実際に「UNIQ_fos_user_id」のような適切な名前を付けることです。この理由は、以下のようなエラーが発生した場合、何が起こっているのか、どのキーが問題なのかをすばやく確認するのが非常に難しいためです(特に、複数の一意キーまたは外部キーがある場合:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'UNIQ_644860558C20A0FB' 

ここでドキュメントを確認しましたが、これを実行できるアノテーション属性が表示されません。

4

1 に答える 1

1

少し調べた後、主キーまたは外部キーの制約を定義することはできません。ただし、一意の制約名は変更できます。

/**
 * @Entity
 * @Table(name="ecommerce_products",uniqueConstraints={
 *     @UniqueConstraint(name="search_idx", columns={"name", "email"})})
 */
于 2013-03-27T09:00:53.020 に答える