【问题标题】:how could I change the type of column in redbeanphp?如何更改 redbeanphp 中的列类型?
【发布时间】:2017-02-11 08:56:52
【问题描述】:

我正在使用RedBeanPHP,我有一串数字,是否可以像字符串一样存储它,而不是double类型?接下来是我的示例,但它不起作用:

    $participant = R::dispense('participants'); 
    $participant->setMeta("participants.number","string");
    $participant->number = $number;
    R::store($participant);

【问题讨论】:

  • 现在使用 number_format($participant->number, 0, '', '') 作为解决方案

标签: php orm redbean


【解决方案1】:

RedBean 将自动尝试为您提供的数据猜测正确的列类型。但是,它永远不会缩小列(例如从TEXTINTEGER),只会扩大(例如从INTEGERTEXT)。

如果在开发期间数据库列是TEXT 对您很重要,那么您可以插入一个string 并再次删除它以“欺骗”RedBean 使列类型为TEXT

例如,将这段代码 sn-p 放入某种类型的初始化脚本中:

$participant = R::dispense('participants'); 
$participant->number = 'not a number';
R::store($participant);
R::trash($participant);

// Column 'participants.number' is now of type TEXT

正如我之前提到的,RedBean 永远不会将列缩小到 INTEGER,即使您不再插入除数字字符串之外的任何其他内容。

另一方面,如果在开发过程中它对您来说并不重要,您可以在部署到生产之前冻结数据库并在数据库管理器中手动将列类型更改为TEXT

【讨论】:

    【解决方案2】:

    Redbean 检查属性给定值以设置列的正确类型,我建议您每次都关闭冻结选项,但是,当您需要更改某些内容时,只需将其打开。我的意思是,当你真的需要对你的桌子进行一些改变时,只需打开冻结,例如:

    // the false param will disable db changes
    R::setup('dns', 'user', 'pass', false);changes (freeze option)
    
    //...
    //... let's imagine you have some code here
    //...
    
    R::freeze(false);
    
    $participant = R::dispense('participants');
    $participant->number = 'intert any string'; // need to set field to string type
    R::store($participant);
    
    R::freeze(true);
    
    $participant->number = '99.99';
    R::store($participant);
    

    我知道这不是最好的,但是当您需要更改数据库结构的某些内容时,您只需打开它即可。本质上,在生产环境中,您应该始终将其关闭

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2011-03-05
      • 2018-06-24
      • 1970-01-01
      • 2010-11-24
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多