How PHP array to schema of MySQL table?

Добрый день!

Для удобства разработки навеяло мне создать некий объект который будет в режиме "дебаг" сравнивать структуру таблицы заложенную в массив со структурой полученной из DESCRIBE table и при необходимости с помощью команд ALTER table будет изменять структуру таблицы.
Надоело лазить во всякие phpmyadmin и прочие за элементарными действиями.

К примеру имеем таблицу - company
и массив её полей
$filds = [
['id', 'int(11)', 'NO', 'PRI', '', 'auto_increment'],
['caption', 'varchar(255)', 'NO', 'MUL', '', ''],
['city', 'varchar(255)', 'NO', '', '', ''],
['inn', 'varchar(255)', 'NO', '', '', ''],
['active', "enum('1','0')", 'NO', '', '1', '']
];


Понадобилось нам добавить поле телефон Phone
добавляем
['id', 'int(11)', 'NO', 'PRI', '', 'auto_increment'],
['caption', 'varchar(255)', 'NO', 'MUL', '', ''],
['city', 'varchar(255)', 'NO', '', '', ''],
['inn', 'varchar(255)', 'NO', '', '', ''],
['phone', 'varchar(255)', 'NO', '', '', ''],
['active', "enum('1','0')", 'NO', '', '1', '']


И при следующем создании экземпляра объекта Компания
Мы увидим что DESCRIBE company отличается от массива $filds
Тогда к базе литит квери
ALTER TABLE company ADD phone VARCHAR(255) AFTER inn


Если из массива удалить строчку ['city', 'varchar(255)', 'NO', '', '', ''],
Тогда ALTER TABLE company DROP city

И так далее. Всего необходимы следующие функции модификации:
- добавить поле
- удалить поле
- изменить тип
- добавить ключ
- переместить поле (изменить порядок внутри таблицы)
....

Может кто подскажет готовую реализацию.
И вообще по вашему опыту - оно надо?
Как по вашему должен выглядеть список возможностей модификаций? Что бы добавили сюда?
  • Вопрос задан
  • 2335 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Это уже есть в doctrine/migrations + doctrine/orm. Можно просто взять doctrine/migrations и dbal и сделать универсальный инструмент.

p.s. использую doctrin/migrations постоянно, миграции схемы дифами это круто.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы