Php Doctrine2:OneToMany注释创建空DB列

Php Doctrine2:OneToMany注释创建空DB列,php,sql,symfony,doctrine-orm,innodb,Php,Sql,Symfony,Doctrine Orm,Innodb,虽然我对Doctrine2和Symfony2还不熟悉,但我对Zend有一点了解,认为我的问题很基本,在尝试了几天之后,我想你也许可以帮助我: 我有两个实体:帐户和成员,一个成员可以有多个帐户,一个帐户始终属于一个成员 我创造的是: class Member { /** * @ORM\OneToMany(targetEntity="Account", mappedBy="members", cascade={"persist", "merge"}) */ priv

虽然我对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)
    ...
}
因此,我希望得到以下DB表:

表帐户:

id, ..., member_id, ...
对于桌上成员,我突然得到:

id, ..., account_id, ...
为什么会有“帐户id”列?虽然我有一些方法,专栏里从来没有写过任何东西。。。我错过了什么


谢谢!非常感谢您提供的任何帮助

我认为您可能会在变量名和“mappedBy”属性中出现一些错误,这是因为命名法没有反映您对
成员
帐户
之间关系的解释。如果两者之间有一个
OneToMany
关系,直觉上我会这样写

class Member {

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

    public function __construct()
    {
        $this->accounts = new ArrayCollection();
    }
}
请注意,新变量名称
accounts
为复数,而
mappedBy
为单数
成员
。然后对于
帐户

class Account {

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

请注意
inversedBy
属性,它告诉您正在引用
成员
侧的哪个集合

我认为,由于命名法没有反映您对
成员
账户
。如果两者之间有一个
OneToMany
关系,直觉上我会这样写

class Member {

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

    public function __construct()
    {
        $this->accounts = new ArrayCollection();
    }
}
请注意,新变量名称
accounts
为复数,而
mappedBy
为单数
成员
。然后对于
帐户

class Account {

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

请注意
inversedBy
属性,它告诉您正在引用
成员
侧的哪个集合

我认为,由于命名法没有反映您对
成员
账户
。如果两者之间有一个
OneToMany
关系,直觉上我会这样写

class Member {

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

    public function __construct()
    {
        $this->accounts = new ArrayCollection();
    }
}
请注意,新变量名称
accounts
为复数,而
mappedBy
为单数
成员
。然后对于
帐户

class Account {

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

请注意
inversedBy
属性,它告诉您正在引用
成员
侧的哪个集合

我认为,由于命名法没有反映您对
成员
账户
。如果两者之间有一个
OneToMany
关系,直觉上我会这样写

class Member {

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

    public function __construct()
    {
        $this->accounts = new ArrayCollection();
    }
}
请注意,新变量名称
accounts
为复数,而
mappedBy
为单数
成员
。然后对于
帐户

class Account {

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

请注意
inversedBy
属性,该属性告诉
成员
侧的哪个集合被引用

对,谢谢,我错过了。我将变量名更改为accounts,但仍然在成员中获取此列account\u id,该列不会被填充。。。也许有助于澄清这种关系:对于一个成员,可以创建多个帐户(基本上是登录名),因此您有特殊的成员资格,可以创建5个不同的登录名,但每个登录名必须仅绑定到一个成员资格。好的,我在代码后面有一个错误的注释,没有注意到这一点。不过,我接受你的回答,因为它帮助我找出了我犯的其他一些错误;-)谢谢!好的,谢谢,我错过了。我将变量名更改为accounts,但仍然在成员中获取此列account\u id,该列不会被填充。。。也许有助于澄清这种关系:对于一个成员,可以创建多个帐户(基本上是登录名),因此您有特殊的成员资格,可以创建5个不同的登录名,但每个登录名必须仅绑定到一个成员资格。好的,我在代码后面有一个错误的注释,没有注意到这一点。不过,我接受你的回答,因为它帮助我找出了我犯的其他一些错误;-)谢谢!好的,谢谢,我错过了。我将变量名更改为accounts,但仍然在成员中获取此列account\u id,该列不会被填充。。。也许有助于澄清这种关系:对于一个成员,可以创建多个帐户(基本上是登录名),因此您有特殊的成员资格,可以创建5个不同的登录名,但每个登录名必须仅绑定到一个成员资格。好的,我在代码后面有一个错误的注释,没有注意到这一点。不过,我接受你的回答,因为它帮助我找出了我犯的其他一些错误;-)谢谢!好的,谢谢,我错过了。我将变量名更改为accounts,但仍然在成员中获取此列account\u id,该列不会被填充。。。也许有助于澄清这种关系:对于一个成员,可以创建多个帐户(基本上是登录名),因此您有特殊的成员资格,可以创建5个不同的登录名,但每个登录名必须仅绑定到一个成员资格。好的,我在代码后面有一个错误的注释,没有注意到这一点。不过,我接受你的回答,因为它帮助我找出了我犯的其他一些错误;-)谢谢!