dongpu5600 2010-07-18 05:52
浏览 28
已采纳

需要帮助理解一对一的Doctrine

Referencing 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;

  // ...
}

The part I don't understand is unique=true. What does it do? The way I read it is ...

  • User has a Many to Many relationship with Phonenumber
  • it uses the join table users_phonenumbers
  • users_phonenumbers.user_id = users.id
  • users_phonenumbers.phonenumber_id = Phonenumber.id
  • and I guess the unique does something to constraints a many to many to a many to one relationship somehow. But how do you explain it? Also in a SQL sense (what is the output like)?
  • 写回答

2条回答 默认 最新

  • dongyudun6465 2010-07-18 17:57
    关注

    The mapping translates into the following SQL tables (assuming both have a surrogate ID, called 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)
    );
    

    What this means in terms of your code:

    $phonenumber = new Phonenumber();
    $phonenumber->setNumber("123-4567890");
    $user1->addPhonenumber($phonenumber);
    $user2->addPhonenumber($phonenumber);
    $entityManager->flush();
    

    This would throw a unique constraint exception, you cannot add the same phonenumber to different users, because phonenumbers are unique (on the database level).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算