Doctrine2:OneToMany Annontation创建空DB列

时间:2014-06-24 13:28:52

标签: php sql symfony doctrine-orm innodb

虽然我是Doctrine2和Symfony2的新手,但我知道一点Zend并且认为我的问题非常基本,现在尝试了几天后,我想你可以帮助我:

我有两个实体:帐户和会员,一个会员可以有多个帐户,一个帐户总是属于一个会员。

我创造的是:

class Member {

    /**
    * @ORM\OneToMany(targetEntity="Account", mappedBy="members", cascade={"persist", "merge"})
    */
    private $account;

    public function __construct()
    {
        $this->account= new ArrayCollection();
    }

    ...

    // the following are set by doctrine: doctrine:generate:entities MMA (my bundle)
    public function addAccount($account) {
    ...
    }

    public function removeAccount($account) {
    ...
    }

}

和此:

class Account {

    /**
     * @ORM\ManyToOne(targetEntity="Member")
     * @ORM\JoinColumn(name="member_id", referencedColumnName="id", onDelete="cascade")
     */
    protected $member;

    (with setter and getter)
    ...
}

所以我希望得到以下数据库表:

表帐号:

id, ..., member_id, ...

对于桌面成员我突然得到:

id, ..., account_id, ...

为什么会有account_id列?虽然我有方法,列从来没有填充任何东西......我缺少什么?

谢谢!非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

我认为您在变量名称中可能会出现一些错误,并且' mappedBy'属于命名法的属性,不反映您对MemberAccount之间关系的解释。如果两者之间存在OneToMany关系,我会直截了当地写

class Member {

    /**
     * @ORM\OneToMany(targetEntity="Account", mappedBy="member")
     */
    private $accounts;

    public function __construct()
    {
        $this->accounts = new ArrayCollection();
    }
}

请注意,新变量名称accounts为复数,mappedBy为单数member。然后是Account

class Account {

    /**
     * @ManyToOne(targetEntity="Member", inversedBy="accounts")
     * @JoinColumn(name="member_id", referencedColumnName="id")
     */
    protected $member;
}

注意inversedBy属性,该属性告知Member侧的哪个集合被引用