2017-02-11 2 views
0

Я использую RedBeanPHP, у меня есть строка чисел, можно ли хранить ее, как строку, а не двойной тип? Мой пример рядом, и он не работает:Как я могу изменить тип столбца в redbeanphp?

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

используя теперь number_format ($ member-> number, 0, '', '') в качестве решения –

ответ

0

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 в вашем менеджере баз данных.

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

Я знаю, что это не самое лучшее, что когда-либо, но вы просто должны включить его, когда вам нужно что-то изменить в структуре БД. По существу, в производственной среде вы всегда должны отключать ее.

Смежные вопросы