Yii AR и migration diff

Статус
В этой теме нельзя размещать новые ответы.

keltanas

marty cats
Вопрос к знатокам.
Есть ли в этом замечательном фреймворке автоматическая генерация миграций, по разнице между схемой моделей и базой, аналогично другим orm?
В стандартных средствах не нашел. Может есть экстеншен какой?

По моделям в Yii вообще можно сгенерить схему БД, или это фантастика?
 

Gas

может по одной?
По моделям в Yii вообще можно сгенерить схему БД, или это фантастика?
нет, в моделях не описывается информация о полях, типах и т.д., она автоматически берётся из базы.
по-этому на первый вопрос ответ тоже скорее всего - нет.
 

keltanas

marty cats
Gas
И у меня такое ощущение, что либо велосипед делать, либо никак.
AmdY
Они на уровне написать все ручками, сначала в одну сторону, потом в другую.
Так, чтобы yiic migrate diff нету, и похоже, быть не может.
 

MiksIr

miksir@home:~$
Есть достаточно сторонних продуктов по сравнению именно схемы базы, что бы сильно замарачиваться и привязываться к фреймворку.
 

Gas

может по одной?
AmdY
там вроде используется стандартный механизм yii для миграций

keltanas
yiic migrate -h

показывает что нет по умолчанию нужного тебе, либо yii-экстеншены искать, либо сторонние либы, а писать самому генерацию alter table'ов по дифу, да ну на )
 

Ragazzo

TDD interested
все верно MiksIr сказал, "use right tools for right purposes", миграции лишь для простого "up/down" применения и базовой инициализации проекта(что-то большее писать самим, всякие там "менеджеры миграций" или "сервис миграций"). на джанго аналогично же вроде.
 

keltanas

marty cats
Ragazzo
http://yiiframework.ru/doc/guide/ru/database.migration
Как и исходный код, структура базы данных изменяется в процессе разработки и поддержки приложения. К примеру, во время разработки может понадобиться добавить новую таблицу или уже после размещения приложения на сервере добавить индекс или столбец. При этом важно отслеживать изменения в структуре базы данных (называемые миграциями) также, как мы делаем это для нашего исходного кода. Если исходный код и база данных не соответствуют друг другу, скорее всего, всё приложение не будет работать. Именно поэтому в Yii есть поддержка миграций, позволяющая отслеживать изменения в базе данных, применять миграции или откатывать уже применённые.
MiksIr
Например, какой инструмент позволит сравнивать модели Yii с базой и генерить разницу?
Как вариант, можно держать схему моделей рядом с самими моделями, и в соответствии с ними генерить миграции.
Вопрос: есть ли уже что-то в этом роде, что можно использовать соместно с yii, или нет? Через гугл пока не нашел.

Или по старинке руками диффы писать. Но, при этом легко ошибиться, из-за чего и возник сабж.
 

Ragazzo

TDD interested
keltanas
и что? ты не понимаешь зачем нужны миграции и тычешься просто так в документацию? omg, ну тычся дальше.
p.s. кто-то на кикстартере собирал даже для джанго на подобную вещь деньги, что говорит о неодназначности задачи :S
 

Redjik

Джедай-мастер
Можно часов 5 искать вариант решения, а можно написать за 5 минут миграцию руками.
Заострять внимание, что в Yii чего то нет, а нужно ли это? код то все равно писать придется =)
 

keltanas

marty cats
Redjik
Миграции писать надо не один раз, а постоянно. Т.к. постоянно меняются запросы заказчика. И за 5 минут не получается написать и отладить, чтобы в обе стороны работало без косяков.
А когда задачу делает кто-то третий, вообще кричи караул.
 

MiksIr

miksir@home:~$
MiksIr
Например, какой инструмент позволит сравнивать модели Yii с базой и генерить разницу?
Как вариант, можно держать схему моделей рядом с самими моделями, и в соответствии с ними генерить миграции.
Вопрос: есть ли уже что-то в этом роде, что можно использовать соместно с yii, или нет? Через гугл пока не нашел.

Или по старинке руками диффы писать. Но, при этом легко ошибиться, из-за чего и возник сабж.
Руками не нужно. Нужно сравнивать эталонную базу с базой разработки, генерировать alter-ы утилитами типа mysqldiff и помещать их в файлы миграции. А при деплое исполнять их как на продакшене, так и на эталонной базе.

ИМХО, вариант, когда в моделе прописана схема и она сама занимается подгоном базы под модель удобна, конечно, но только когда у нас небольшой проектик, который мы по ftp заливаем на наш продакшн изредка. В случае крыпных проектов с налаженным деплоем автоматическая миграция даже вредна из-за возможных пропущенных ошибок.
 

MiksIr

miksir@home:~$
ЗЫ: И в обе стороны можно, даже - делаем два diff-а в разных направлениях и все... но я бы лично не стал бы писать миграцию в обратную сторону. Данные в удаленной колонке не восстановить обратной миграцией. Лучше вообще не удалять.
 

Gas

может по одной?
А когда задачу делает кто-то третий, вообще кричи караул.
тут без админ-методов никуда, ладно там баги у всех бывают, но после второго комита в котором используется новое поле в коде, а миграции для него нет - надо бить в зубы )
 

MiksIr

miksir@home:~$
тут без админ-методов никуда, ладно там баги у всех бывают, но после второго комита в котором используется новое поле в коде, а миграции для него нет - надо бить в зубы )
А мы не били зубы, а просто делали сравнение при сборке пакета для деплоя. Зубы били за удаление и переименование колонок ;)
 

Ragazzo

TDD interested
Gas
не надо бить зубы, надо просто сделать ревью кода и тесты подправить, все ;) а то потом как разговаривать людям :S
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху