PHP ORM自动架构同步

时间:2011-04-27 06:21:00

标签: php orm

是否有任何PHP ORM可以自动将我的数据库同步到代码中定义的模式?

问题是我有很多机器可以部署代码而且无法访问命令行,也不知道部署完成后。

基本上,一旦PHP看到代码中定义的模式发生变化,我就需要重新同步数据库,而不需要任何命令行甚至是手动迁移的可能性。

任何一个ORM已经解决了这个问题?

8 个答案:

答案 0 :(得分: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)

尝试学说ORM

http://www.doctrine-project.org/ 使用symfony它已经内置了与其非常强大的学说集成

答案 2 :(得分:2)

RedBean正是您想要的:http://www.redbeanphp.com/

通过动态更新架构,您可以在开发阶段专注于代码,并让您在生产之前对架构进行微调。

答案 3 :(得分:1)

Redbean 2完全支持将于8月1日发布的n:1关系

答案 4 :(得分:0)

Propel PHP ORM具有从现有模式构建模型的功能。

但是,在同步模式时,我倾向于使用http://www.quest.com/toad-for-mysql/

它非常稳固。

答案 5 :(得分:0)

RedBean附带了一个名为redshoe的同步工具,可以为您同步任何MySQL数据库。您不需要命令行访问,它可以为您在屏幕上放置所需的SQL。另一种方法是在RedBean中使用querylogger,只记录所有修改并将它们发送到其他服务器。

答案 6 :(得分:0)

实际上db.php orm(http://dbphp.net)只有一个方法$database->update(),可以同步orm中定义的每个sql连接链路上的所有内容。

您还可以将旧表重命名为新名称,将旧字段重命名为新字段。例如,如果您有字段用户名和属性用户名,然后将您的属性重命名为login:

/**
* rename username
*/
public $login

这会将字段用户名重命名为login(在与此类相关的表中)。

答案 7 :(得分:0)

是的,我实现了一个 - 可以自动同步或区分任何数据库的架构更改的ORM。 (也支持多个数据源)

您可以尝试LazyRecord https://github.com/c9s/LazyRecord

LazyRecord集成了基于PHP的全功能模式和相关的迁移功能。

最强大的功能是 - 自动迁移,类似于UIKit的轻量级数据库迁移。

该项目已经积极开发超过5年,并已部署到许多生产环境中。

这里有一些截屏视频:

您也可以手动编辑自动生成的迁移脚本