0

現在、SonataUserBundle の User を拡張して、既存のエンティティとの新しい ManyToMany 関係を追加しようとしています。

ここにある回答に基づいてユーザーを拡張しました - Sonata User Bundle の拡張と新しいフィールドの追加

ユーザー.php

/**
 * @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", inversedBy="pledgedUsers")
 **/
private $pledgedOn;

// (...) generated getters and setters here

Pledge.php

/**
 * @ORM\ManyToMany(targetEntity="Foo\UserBundle\Entity\User", inversedBy="pledgedOn")
 **/
private $pledgedUsers;

// (...) generated getters and setters here

スキーマを同期して最初に気付いたのは、ピボット テーブルが 1 つではなく 2 つ作成されていることpledge_userですuser_pledge。を追加しようとしました@ORM\JoinTableが、それは 1 つの名前を変更するだけです。両方に同じものを追加すると@ORM\JoinTable、「テーブルが既に存在します」というエラーが表示されます。

admin でユーザー リストにアクセスしようとすると、大きな SQL エラーが発生します。

An exception occurred while executing 'SELECT count(DISTINCT u0_.id) AS sclr0 FROM User u0_ LEFT JOIN fos_user_user_group f2_ ON u0_.id = f2_.user_id LEFT JOIN fos_user_group f1_ ON f1_.id = f2_.group_id':

SQLSTATE[42703]: Undefined column: 7 ERROR: column u0_.id does not exist

これは単純なことだと確信していますが、この問題の原因を見つけようと頭を悩ませています。私は何を取りこぼしたか?

完全な User.php: http://pastebin.com/TXunsgm1

完全な Pledge.php: http://pastebin.com/Mta6aiVm

4

1 に答える 1

0

私はそれがダーピーエラーであることを知っていました。私が持っていた

 * @ORM\ManyToMany(targetEntity="Foo\UserBundle\Entity\User", inversedBy="pledgedOn")

 * @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", inversedBy="pledgedUsers")

そのうちの 1 つは のmappedBy代わりにする必要がありましたinversedBy。2番目のものをに変更する

 * @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", mappedBy="pledgedUsers")

問題を修正しました。

于 2014-03-25T01:58:04.740 に答える