【问题标题】:Is it possible to be intentionally strict with table structure in RedBeanPHP?是否有可能对 RedBeanPHP 中的表结构故意严格?
【发布时间】:2012-04-24 16:31:59
【问题描述】:

我真的很喜欢 RedBeanPHP 的概念。正在开发中的人不必担心使用数据库,RedBean 会为您完成这一切。表格在您工作时自行形成,当您对表格感到满意时,您可以冻结它们。我看到的唯一问题是当您将项目移动到新系统时。 ORM 的重要部分之一是数据库表是从 PHP 模型创建的,这意味着您不必经常导出数据库结构以保证其安全。我不知道如何使用 RedBean 来实现这一点,因为它在随着时间的推移反复使用可变数据后形成了表结构。

我意识到事先定义表的结构会削弱首先使用 RedBean 的点,但我至少想在使用 RedBean 的“动态模式”之后在 PHP 中定义数据库的结构开发,这样在系统之间移动项目就不会那么痛苦了。

我希望我的顾虑足够清楚,可以让曾经使用过 RedBeanPHP 并且可能曾经遇到过这个问题的人解决。

谢谢

【问题讨论】:

标签: php redbean


【解决方案1】:

刚刚发现可以在 RedBean 中使用元数据来强制类型:

$bean->setMeta('cast.myproperty', 'text');

在这里找到:http://redbeanphp.com/extra/meta_data

【讨论】:

  • 你如何为整数做同样的事情?
【解决方案2】:

可以扩展R::freeze 方法来创建一个空的sqlite 数据库并使用R::syncSchema 来填充它的结构。然后在生产中,任务可以使用相同的方法来反转过程。

【讨论】:

    【解决方案3】:

    我还没有执行它,但我的想法是制作一个使用 FUSE 加载所有 bean 类型的迁移脚本,并迭代地为每种 bean 类型创建一个带有假数据的 bean(基于 bean 的元数据信息)并存储它。这将基于模型重新创建表结构,然后脚本将截断表并将生产数据导入其中。

    不是很优雅,因为您需要在模型中的某处声明数据库结构,但零配置是不可能实现的。

    【讨论】:

    • 我的 RedBean 项目目前依赖单元测试来重新创建表结构。目前最好的解决方案
    猜你喜欢
    • 2012-01-28
    • 2019-06-27
    • 1970-01-01
    • 2012-06-14
    • 2020-12-08
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多