2017-02-11 54 views
0

我正在使用RedBeanPHP,我有一串數字,是否有可能將它存儲爲字符串,而不是雙重類型?我的例子是下了,這是行不通的:如何更改redbeanphp中的列的類型?

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

現在使用number_format($ participant-> number,0,'','')作爲解決方案 –

回答

0

RedBean會自動嘗試爲您提供的數據猜測正確的列類型。但是,它永遠不會縮小列(例如從TEXTINTEGER),只會擴大(例如從INTEGERTEXT)。

如果在開發過程中數據庫列爲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 

正如我前面提到的,紅豆將永遠不會縮小列INTEGER即使你從來沒有再次插入什麼比數字串別的。另一方面,如果在開發過程中對您並不重要,則可以在部署到生產前凍結數據庫,然後在數據庫管理器中手動將列類型更改爲TEXT

1

紅豆檢查屬性給定值來設定權類型列,我會建議你每次都凍結選擇去工作,但是,當你需要改變一些東西,你只需打開它。我的意思是,剛打開的時候,你真的需要執行你表中的一些變化,前凍結:

// 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); 

我知道這是不是有史以來最好的東西,但你必須把它當您需要改變數據庫結構。本質上,在生產環境中,您應該始終關閉它