2017-02-11 1 views
0

J'utilise le RedBeanPHP, j'ai une chaîne de nombres, est-il possible de le stocker comme la chaîne, pas un type double? Mon exemple est le suivant, et il ne fonctionne pas:comment pourrais-je changer le type de colonne dans redbeanphp?

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

en utilisant maintenant number_format ($ participant-> nombre, 0, '', '') comme solution –

Répondre

0

RedBean essaiera automatiquement de deviner le bon type de colonne pour les données que vous fournissez. Cependant, il ne rétrécira jamais une colonne (par exemple de TEXT à INTEGER), seulement s'élargit (par exemple de INTEGER à TEXT).

S'il est important pour vous que la colonne de base de données est TEXT au cours du développement, vous pourriez donc insérer un string et le supprimer à nouveau redbean « trick » en faisant le type de colonne TEXT.

Par exemple, mettre cet extrait de code dans un certain type de script d'initialisation:

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

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

Comme je l'ai mentionné plus tôt, redbean ne sera jamais rétrécir la colonne INTEGER même si vous n'insérez rien d'autre que des chaînes de numéro. D'un autre côté, si ce n'est pas important pour vous pendant le développement, vous pouvez simplement geler la base de données avant de la déployer en production et changer manuellement le type de colonne en TEXT dans votre gestionnaire de base de données.

1

attribut check Redbean valeur donnée pour définir le type de la colonne, je vous recommande de travailler avec option gel de tous les temps, mais, lorsque vous besoin de changer quelque chose, il vous suffit de l'allumer. Je veux dire, il suffit de tourner le gel lorsque vous avez vraiment besoin d'effectuer des changements sur vous table, par ex:

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

Je sais que ce n'est pas la meilleure chose jamais, mais il vous suffit de l'activer lorsque vous avez besoin pour changer quelque chose sur la structure DB. Essentiellement, dans un environnement de production, vous devez toujours l'éteindre