Добавление новых столбцов в существующую модель доктрины - PullRequest
1 голос
/ 09 мая 2011

Прежде всего, шляпы StackOverflow за отличный сервис и вам, ребята, за то, что нашли время ответить на наши вопросы.

Я использую Doctrine ORM 1.2.4 с CodeIgniter 1.7.3. Я создал сайт с некоторыми необходимыми таблицами и добавил данные только для того, чтобы позднее понять, что в конкретной таблице должен быть еще один столбец.

Я создал таблицы, написав модель в виде классов php, которые расширяют Doctrine_Record.

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

PS: я не пытаюсь изменить столбец со связями с другими таблицами, я просто добавляю новый столбец, который не связан ни с какой другой таблицей. Также я создаю таблицы в базе данных, используя Doctrine :: createTablesFromModels (); Когда я изменяю таблицу новым столбцом и запускаю этот метод, он показывает ошибки.

1 Ответ

0 голосов
/ 09 мая 2011

Поскольку вы не хотите удалять и создавать заново, используйте Doctrine Migration.

Официальные документы показывают много примеров:

http://www.doctrine -project.org / проекты / ОРМ / 1,2 / Docs / ручной / Миграция / ан

Поскольку вы просто хотите добавить поле, посмотрите на их второй пример кода, как наиболее релевантный, который выглядит следующим образом:

// migrations/2_add_column.php

class AddColumn extends Doctrine_Migration_Base
{
    public function up()
    {
        $this->addColumn('migration_test', 'field2', 'string');
    }

    public function down()
    {
        $this->removeColumn('migration_test', 'field2');
    }
}
...