0

シンプルな OneToMany (1 人のユーザーが多くのコメントを書くことができる) というシンプルな User->Comment 関連付けを Doctrine でセットアップしました。

すべての作品が見つかりましたが、Doctrine の奇妙な動作を見つけました。最初のいくつかのコード:

ユーザーエンティティ

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User extends EntityAbstract {
    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue
     */
    protected $_id;

    /**
     * @var \Doctrine\Common\Collections\Collection
     * @ORM\OneToMany(targetEntity="Comment", mappedBy="TodayIsASunnyDay")
     *                                                  ^^^^^^^^^^^^^^^^ WTF
     */
    protected $_commentsAuthored;

    public function __construct() {
        $this->_commentsAuthored = 
            new \Doctrine\Common\Collections\ArrayCollection();
    }
}

コメント エンティティ

/**
 * @ORM\Entity
 * @ORM\Table(name="comments")
 */
class Comment extends EntityAbstract {
    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue
     */
    protected $_id;

    /**
     * @var User
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     *
     */
    protected $_author;
}

ユーザーでは、教義は関連付けの逆側であるため、mappedBy属性が必要です。しかし、どうやら、value として必要なものを何でも記述できます。(正しい値は「user_id」だと思いますか?)

では、この値はいつ使用またはチェックされるのでしょうか?

4

1 に答える 1

0

そうです、私のプロジェクトでチェックしました-エラーは発生しません。エンティティが読み込まれる方法に影響します (fetch="EAGER"内部OneToManyに設定するとエラーが発生します)。主に、データをハイドレートするときに所有者側をコメント オブジェクトに設定します (理解するのが難しいフードの下にもう少し魔法がかかっています)。doctrine bug tracker に問題を投稿します。フィールド名のスペルを間違えると、デバッグが困難なエラーの原因になります。


inversedBy同様 に指定する必要があります。

/**
 * @var User
 * @ORM\ManyToOne(targetEntity="User", inversedBy="_commentsAuthored")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 *
 */
protected $_author;

の値を取得し、_commentsAuthoredそれを使って何かをしようとするとき (例: カウントするとき)に使用する必要があります。

于 2012-05-13T17:39:30.423 に答える