0

我在Doctrine中建立了一个简单的User->Comment关联,简单的OneToMany(一个用户可以写很多评论)。

所有作品都找到了,但我发现了一个奇怪的教义行为。首先一些代码:

用户实体

/**
 * @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,你会得到你的错误),主要是它在水合数据时将所有者设置在评论对象上(引擎盖下有更多的魔法,很难理解)。我会在教义错误跟踪器中发布一个问题,如果您拼写错误的字段名称,它是一个难以调试的错误来源。


您还需要指定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 回答