Php Doctrine2:OneToMany注释创建空DB列
虽然我对Doctrine2和Symfony2还不熟悉,但我对Zend有一点了解,认为我的问题很基本,在尝试了几天之后,我想你也许可以帮助我: 我有两个实体:帐户和成员,一个成员可以有多个帐户,一个帐户始终属于一个成员 我创造的是: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
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个不同的登录名,但每个登录名必须仅绑定到一个成员资格。好的,我在代码后面有一个错误的注释,没有注意到这一点。不过,我接受你的回答,因为它帮助我找出了我犯的其他一些错误;-)谢谢!