Doctrine 1.2 Соглашения об именах столбцов для отношений «многие ко многим» - PullRequest
0 голосов
/ 17 июня 2010

Я работаю с существующей схемой базы данных и пытаюсь настроить две модели Doctrine с отношением «многие ко многим», , как описано в этом документе

При создании таблиц с нуля у меня нет проблем с этим. Однако в существующих таблицах соединений используется другое соглашение об именах, чем то, что описано в документе Doctrine. В частности

Table 1
--------------------------------------------------
table_1_id
....other columns....

Table 2
--------------------------------------------------
table_2_id
....other columns....

Join Table
--------------------------------------------------
fktable1_id
fktable_2_id

По сути, предыдущие разработчики предваряли все внешние ключи fk.

Из примеров, которые я видел, и некоторые краткие эксперименты с кодом, выясняется, что Doctrine 1.2 требует , чтобы таблица соединений использовала те же имена столбцов, что и таблицы, к которым она присоединяется

  1. Правильно ли мое предположение?

  2. Если да, изменилась ли ситуация в Учении 2?

  3. Если ответы на любой из приведенных выше вопросов верны, как настроить модели таким образом, чтобы все столбцы «выстраивались»

Ответы [ 2 ]

1 голос
/ 19 июня 2010

Посмотрите на документы относительно отношений N: M.

Когда вы посмотрите на

$this->hasColumn('user_id', 'integer', null, array(
                'primary' => true
            )
        );

из документов, вы увидите, что этоВам, как вы называете столбец в вашей модели соединения.

Поскольку у вас уже есть база данных, почему бы не сгенерировать модели с помощью Doctrine ? API показывает необходимые параметры для этого.Я использовал это сам, и это работает довольно хорошо.Иногда вам могут потребоваться некоторые очистки, если у вас сложная структура, но сгенерированные файлы - очень хорошее начало.

1 голос
/ 18 июня 2010

Вам просто нужно установить местную и внешнюю части в соответствии с именами столбцов

Table1:
  columns:
    table_1_id: int
    ....
  relations:
    Table2:
      foreignAlias: FromSecond
      local: table_1_id
      foreign: fktable1_id
      refClass: JoinTable
Table2:
  columns:
    table_2_id: int
    ....
  relations:
    Table1:
      foreignAlias: FromFirst
      local: table_2_id
      foreign: fktable2_id
      refClass: JoinTable
JoinTable:
  columns:
    fktable1_id: int
    fktable2_id: int
  relations:
    Table1:
    Table2:
...