SchemaTool为OneToOne的关联生成唯一索引。我认为这是不正确的。
Doctrine的“关联”手册页的第6.6节显示了一个产品的OneToOne有一个送货的示例。这显示为生成Product表:
CREATE TABLE Product (
id INT AUTO_INCREMENT NOT NULL,
shipping_id INT DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
但是,对于我的实体的相同代码,用户有一个组织,我的用户表SQL生成为
CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL,
organisation_id INT DEFAULT NULL,
UNIQ_3B978F9FA7F43455 (organisation_id),
PRIMARY KEY(id)
) ENGINE = InnoDB;
这可以防止我添加2个具有相同组织的用户。不正确。
我添加了尝试使用唯一的JoinColumn注释参数的详细信息。
@JoinColumn(name="organisation_id", referencedColumnName="id", unique="false")
有什么想法吗?我似乎无法找到任何关于此事的内容。
由于
答案 0 :(得分:47)
如果一个组织拥有多个用户且许多用户拥有一个且仅有一个组织,那么它就不是一对一的关联。
一对一的关联必须是唯一的。
您的关联在用户方ManyToOne
和组织方OneToMany
。
user.php的
/**
* @ManyToOne(targetEntity="Organisation")
*/
private $organisation;
Organisation.php
use Doctrine\Common\Collections\ArrayCollection;
/**
* @OneToMany(targetEntity="User", mappedBy="organisation")
*/
private $users;
function __construct() {
$this->users = new ArrayCollection();
}
答案 1 :(得分:0)
也许YML版本可以帮助其他以doctrine / symfony开头的人。这是我的版本:
<强> User.orm.yml
强>
manyToOne:
organisation:
targetEntity: Organisation
joinColumn:
name: organisation_id
referencedColumnName: id
<强> Organisation.orm.yml
强>
oneToMany:
users:
targetEntity: User
mappedBy: organisation
joinColumn:
name: organisation_id
referencedColumn: id
希望它有所帮助。