引用doctrine reference - one to many unidirectional
class User
{
// ...
/**
* @ManyToMany(targetEntity="Phonenumber")
* @JoinTable(name="users_phonenumbers",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="phonenumber_id", referencedColumnName="id", unique=true)}
* )
*/
private $phonenumbers;
// ...
}
我不理解的部分是unique=true
。它有什么作用?我读它的方式是......
users_phonenumbers
users_phonenumbers.user_id = users.id
users_phonenumbers.phonenumber_id = Phonenumber.id
unique
做了一些事情,以某种方式约束多对多关系。但你怎么解释呢?同样在SQL意义上(输出是什么样的)?答案 0 :(得分:2)
映射转换为以下SQL表(假设两者都有一个代理ID,称为id):
CREATE TABLE User (id INT(10) PRIMARY KEY)
CREATE TABLE Phonenumber (id INT(10) PRIMARY KEY)
CREATE TABLE User_Phonenumber (
user_id INT(10),
phonenumber_id INT(10),
PRIMARY KEY (user_id, phonenumber_id),
UNIQUE(phonenumber_id)
);
这对您的代码意味着什么:
$phonenumber = new Phonenumber();
$phonenumber->setNumber("123-4567890");
$user1->addPhonenumber($phonenumber);
$user2->addPhonenumber($phonenumber);
$entityManager->flush();
这会抛出一个唯一的约束异常,你不能向不同的用户添加相同的phonenumber,因为phonenumbers是唯一的(在数据库级别上)。
答案 1 :(得分:0)
唯一约束可确保列或列组中包含的数据 唯一的。
请注意,两个空值不被视为相等,因此您可以存储两个或更多个重复行。主键已经是唯一的,因此您不需要使用主键列。 :)
P上。