Doctrine ORM: создайте таблицу как другую

Есть ли способ при использовании Doctrine создать таблицу, похожую на другую? Я знаю, что в MySQL есть функция для этого:

CREATE TABLE user2 LIKE user;

а таблицы user и user2 будут идентичными. Можно ли это сделать в доктрине?


person JB Lesage    schedule 04.11.2009    source источник
comment
Я даже не знал, что это возможно в MySQL. Спасибо за вопрос :-)   -  person Exception e    schedule 26.11.2009


Ответы (3)


Я предполагаю, что вы ищете определение (давайте использовать ваш пример) на уровне схемы, которую user2 наследует от user при создании вашей модели. Вы можете сделать это, используя наследование concrete доктрины, которое описан в документации.

Итак, в вашем schema.yml:

User:
  columns:
    name: string

User2:
  inheritance:
    extends: User
    type: concrete
  columns:
    something: int

Таким образом, user2 будет отдельной таблицей и будет содержать те же столбцы («имя»), которые ранее были определены в user. Я не уверен, зачем вам нужны две идентичные таблицы, но это определенно возможно с помощью описанного выше метода.

person tedeh    schedule 04.11.2009
comment
Это, вероятно, лучшее решение этой проблемы... спасибо! - person JB Lesage; 06.12.2009

Я думаю нет. :(

Вы можете создавать таблицы из шаблона, как здесь http://www.doctrine-project.org/documentation/cookbook/1_1/en/plug-and-play-schema-information-with-templates или используйте Doctrine_RawSql.

person Pavlo Svirin    schedule 04.11.2009

Doctrine предоставляет для этого простой метод: Doctrine_Record::copy().

  $copy = $user->copy();

Обратите внимание, что копирование записи с помощью функции copy() возвращает новую запись (состояние TDIRTY) со значениями старой записи и копирует отношения этой записи. Если вы не хотите копировать отношения, вам нужно использовать copy(false).

Получить копию пользователя без отношений

$copy = $user->copy(false);

person Arup    schedule 11.02.2010