これは簡単な問題のようですが、解決できないようです。
Person と Flag の 2 つのエンティティがあります。Flag は Person に対して ManyToOne の関係を持っています。私が問題に直面しているのは、Person の id フィールドが int 型ではなく bigint であることです。
したがって、Flag エンティティの ManyToOne フィールドで次のような構文を使用します。
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="flags")
* @ORM\JoinColumn(name="personId", referencedColumnName="id")
*/
protected $person;
次のような外部キーエラーが発生します
An exception occurred while executing 'ALTER TABLE flags ADD CONSTRAINT FK_B0541BAA20C4B1C FOREIGN KEY
personId フィールドが整数で、個人の ID フィールドが bigint であるため、このエラーが生成される以外に、このエラーの他のすべての可能性を使い果たしたと思います。これらの外部キーの関係は、このバンドル内の他のエンティティ間で正常に機能しており、問題を引き起こしているのは Person とその bigint 主キーのみです。
次のようなエラーが発生せずに JoinColumn に type="bigint" を追加できません。
The annotation @ORM\JoinColumn declared on property Acme\AcmeBundle\Entity\PersonFlag::$person does not have a pro
perty named "type"
また、型を宣言するために Column アノテーションを追加すると、以下に示すように JoinColumn が無視されます。
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="flags")
* @ORM\JoinColumn(name="personId", referencedColumnName="id")
* @ORM\Column(type="bigint")
*/
protected $person;
これによりエラーは発生しませんが、外部キーを持たない「person」という名前の列が作成されます。
では、何が欠けているのでしょうか。主キーとして bigint を持つエンティティにこの ManyToOne 関係を追加するにはどうすればよいでしょうか?
Person エンティティの ID フィールドの注釈は次のとおりです。
/**
* @ORM\Id
* @ORM\Column(type="bigint")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
ティ!