我正在使用RedBeanPHP,我有一串数字,是否可以像字符串一样存储它,而不是双重类型?我的例子是下一个,它不起作用:
$participant = R::dispense('participants');
$participant->setMeta("participants.number","string");
$participant->number = $number;
R::store($participant);
答案 0 :(得分:1)
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);
我知道这不是最好的事情,但是当你需要改变数据库结构的东西时,你只需要打开它。基本上,在生产环境中,您应该始终将其关闭
答案 1 :(得分:1)
RedBean会自动尝试为您提供的数据猜测正确的列类型。但是,它永远不会缩小列(例如从TEXT
到INTEGER
),只会加宽(例如从INTEGER
到TEXT
)。
如果在开发期间数据库列为TEXT
对您很重要,则可以插入string
并再次删除它以“欺骗”RedBean以使列类型为TEXT
。
例如,将此代码段放入某种类型的初始化脚本中:
$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
。