Нужна помощь в понимании Учения один ко многим - PullRequest
0 голосов
/ 18 июля 2010

Ссылка Ссылка на доктрину - один ко многим однонаправленным

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 (как выглядит вывод)?

Ответы [ 2 ]

2 голосов
/ 18 июля 2010

Отображение преобразуется в следующие таблицы SQL (при условии, что обе имеют суррогатный идентификатор, называемый 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();

Это приведет к исключению уникального ограничения: вы не можете добавить один и тот же номер телефона разным пользователям, потому что номера телефонов уникальны (на уровне базы данных).

0 голосов
/ 18 июля 2010

Уникальные ограничения гарантируют, что данные, содержащиеся в столбце или группе столбцов, являются уникальными.

Имейте в виду, два нулевых значения НЕ считаются равными, поэтому вы можете хранить две или более повторяющихся строк.Первичный ключ уже уникален, поэтому вам не нужно использовать его для столбцов первичного ключа.:)

P.

...