Автоматическая синхронизация схемы PHP ORM

#php #orm

#php #orm

Вопрос:

Существует ли какой-либо PHP ORM, который может автоматически синхронизировать мою базу данных со схемой, определенной в коде?

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

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

Какой-либо из ORM уже решил это?

Ответ №1:

Как сказал пользователь 716189, RedBean — хорошее решение.

В отличие от того, что сказал ‘Slava N’, вы также можете использовать отношения «один ко многим». RedBeanPHP не предлагает специальных функций для обработки связей внешнего ключа, но легко использовать ассоциации внешнего ключа или N: 1 вручную:

 $page->book_id = $book->id
  

И загрузка ассоциации внешнего ключа также не представляет сложности:

 $pages = R::find("page"," book_id = ? ",array($book->id));
  

Или наоборот:

 $book = R::load("book", $page->book_id );
  

Цитируется из: RedBean Relations (и исправлены некоторые опечатки)

Ответ №2:

попробуйте doctrine ORM

http://www.doctrine-project.org используйте symfony, он встроен в интеграцию с doctrine, его очень мощный

Ответ №3:

RedBean — это именно то, что вам нужно: http://www.redbeanphp.com /

Это позволяет вам сосредоточиться на вашем коде на этапе разработки, обновляя вашу схему на лету, и позволяет вам точно настроить вашу схему перед производством.

Комментарии:

1. RedBean вроде бы подходит, но он не позволяет настраивать его для устаревшей схемы БД. Особенно. отношения «один ко многим» (которые RedBean в любом случае выполняет как «многие ко многим»)

2. Это неверно, вы также можете установить отношение «один ко многим» с RedBeanPHP. Я опубликовал новый ответ с примером (неудобно использовать комментарии для примеров кода)

Ответ №4:

Redbean 2 полностью поддерживает отношения n: 1. он будет выпущен 1 августа

Ответ №5:

В Propel PHP ORM есть функция построения моделей на основе существующей схемы.

Однако при синхронизации схем я обычно использую http://www.quest.com/toad-for-mysql /

Это действительно надежно.

Ответ №6:

RedBean поставляется с инструментом синхронизации под названием redshoe, который может синхронизировать любую базу данных MySQL для вас. Вам не нужен доступ к командной строке, он может вывести необходимый SQL на экран для вас. Другой способ — использовать querylogger в RedBean и просто регистрировать все изменения и отправлять их на другие серверы.

Ответ №7:

На самом деле db.php orm (http://dbphp.net ) имеет только один метод $database->update() , который синхронизирует все по каждой ссылке подключения sql, определенной в orm.

Вы также можете переименовать старые таблицы в новые имена или старые поля в новые поля. Например, если у вас было имя пользователя поля и имя пользователя свойства, а затем вы переименовали свое свойство в login:

 /**
* rename username
*/
public $login
  

Это переименует поле username в login (в таблице, относящейся к этому классу).

Ответ №8:

Да, я реализовал один — ORM, который может автоматически синхронизировать или изменять изменения схемы с любой базой данных. (также поддерживается несколько источников данных)

Вы можете попробовать LazyRecord https://github.com/c9s/LazyRecord

LazyRecord интегрирует полнофункциональную схему на основе PHP и связанные с ней функции миграции.

Наиболее мощной функцией является автоматическая миграция, которая похожа на облегченную миграцию базы данных UIKit.

Этот проект находится в активной разработке более 5 лет и был развернут во многих производственных средах.

вот несколько скринкастов:

Вы также можете вручную отредактировать автоматически сгенерированный сценарий миграции