2011-04-27 47 views
2

是否有任何PHP ORM可以自動將我的數據庫同步到代碼中定義的模式?PHP ORM自動模式同步

問題是,我有很多機器部署代碼並且無法訪問命令行,並且在部署完成時不知道。

基本上,我需要在PHP看到代碼中定義的架構發生變化時立即重新同步數據庫,而不需要任何命令行,甚至不需要手動遷移。

ORM的任何一個已經解決了嗎?

回答

2

紅豆就是你想要什麼:http://www.redbeanphp.com/

它可以讓你在關注你的代碼通過即時更新您的架構來實現開發階段,並讓您在生產之前優化您的架構。

+0

紅豆那種千篇一律的,但它不會讓你定製用於傳統數據庫架構。 ESP。一對多關係(RedBean無論如何都是多對多的) – 2011-04-27 14:43:01

+0

這是不正確的,你也可以與RedBeanPHP建立一對多的關係。我用一個示例發佈了一個新答案(對於代碼示例使用註釋並不方便) – dvb 2011-05-26 09:38:44

0

RedBean帶有一個名爲redshoe的同步工具,可以爲您同步任何MySQL數據庫。你不需要命令行訪問,它可以把你需要的SQL放在屏幕上。另一種方法是在RedBean中使用querylogger,並記錄所有修改並將它們發送到其他服務器。

3

正如user716189所說,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(和固定的一些錯字)

1

紅豆2完全支持N:1間的關係,將在8月1日

0

發佈其實db.php中ORM(http://dbphp.net)只有一個方法,那$database->update()在SYNCHS ORM定義的每個SQL連接鏈路上的所有內容。

您還可以將舊錶重命名爲新名稱或將舊字段重命名爲新字段。例如,如果你有外地的用戶名和財產的用戶名,然後重命名你的財產登錄:

/** 
* rename username 
*/ 
public $login 

這將重命名字段的用戶名登錄(在與此相關的類表)。

0

是的,我實現了一個 - 一個ORM,可以自動同步或不同模式更改與任何數據庫。 (多個數據源也支持)

您可以嘗試LazyRecord https://github.com/c9s/LazyRecord

LazyRecord集成了全功能的基於PHP的架構和相關的遷移功能。

最強大的功能是 - 自動遷移,它類似於UIKit的輕量級數據庫遷移。

該項目已經積極開發超過5年,並已部署到許多生產環境。

這裏有一些截屏:

您也可以手動編輯自動生成的遷移腳本