如何更改 redbeanphp 中的列类型?

Posted

技术标签:

【中文标题】如何更改 redbeanphp 中的列类型?【英文标题】:how could I change the type of column in 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, '', '') 作为解决方案 【参考方案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);

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

【讨论】:

以上是关于如何更改 redbeanphp 中的列类型?的主要内容,如果未能解决你的问题,请参考以下文章

你如何更改rails中的列数据类型?

如何更改 firebird3 中的列类型

如何在不包含新列名和类型的情况下更改现有 Hive 表中的列注释?

更改 DataFrame 中的列数据类型并将其传递到 UDF - PySpark

SQL如何更改表中的列名称?

RedBeanPHP - R::isoDateTime() - 如何设置时区?