虽然我是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列?虽然我有方法,列从来没有填充任何东西......我缺少什么?
谢谢!非常感谢任何帮助
答案 0 :(得分:3)
我认为您在变量名称中可能会出现一些错误,并且' mappedBy'属于命名法的属性,不反映您对Member
和Account
之间关系的解释。如果两者之间存在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
侧的哪个集合被引用