0

これは簡単な問題のようですが、解決できないようです。

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;

ティ!

4

1 に答える 1

1

エンティティ間の関係では、外部キーがモデル (ID など) に既にマップされている必要があるため、列の種類を避けることができると思います。これを試して:

/**
 * @ORM\ManyToOne(targetEntity="Person", inversedBy="flags")
 * @ORM\JoinColumn(name="personId", referencedColumnName="id")
 */
protected $person;

次に、人物モデルには次のようなものが必要です。

/**
 * @OneToMany(targetEntity="Flag", mappedBy="person")
 */
protected $flags;
于 2013-10-22T16:14:16.580 に答える