是否有任何PHP ORM可以自动将我的数据库同步到代码中定义的模式?
问题是我有很多机器可以部署代码而且无法访问命令行,也不知道部署完成后。
基本上,一旦PHP看到代码中定义的模式发生变化,我就需要重新同步数据库,而不需要任何命令行甚至是手动迁移的可能性。
任何一个ORM已经解决了这个问题?
答案 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)
答案 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年,并已部署到许多生产环境中。
这里有一些截屏视频:
您也可以手动编辑自动生成的迁移脚本