2011-04-27 72 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年,并已部署到许多生产环境。

这里有一些截屏:

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