Как я могу использовать бит MySQL при использовании DBIx
Вопрос
Я пытаюсь получить доступ к битовому полю MySQL в моем приложении-катализаторе.Вот информация о таблице:
SQL:
create table foo{
...
mybitField bit(1) NOT NULL default b'0'
}
Моя сопоставленная таблица:
...
mybitField
{
data_type => "BIT",
default_value => "b'0'",
is_nullable => 0,
size => undef,
}
...
Теперь в моем контроллере я делаю простое
$c->stash->{foos}=[$c->model('DB::foo')->all];
и в моем шаблоне я попробовал следующее:
[% FOREACH foo IN foos -%]
<tr>
[%- IF int(foo.mybitField) %]
<td>The field is True</td>
[%- ELSE %]
<td>The field is False</td>
[% END %]
</tr>
[% END -%]
Я тоже попробовал просто
[%- IF foo.mybitField %]
но это тоже не сработало.Есть ли другой способ, кроме изменения самого типа поля базы данных?
Решение
Я только что протестировал это, и поля MySQL BIT вернулись как «необработанное» двоичное значение, как и ожидалось.Похоже, у вас проблема с набором инструментов для шаблонов.
Я не знаю, что вы имеете в виду:
[%- IF int(foo.mybitField) %]
Я не думаю, что у TT есть функция int().И функция int() в Perl тоже не будет делать то, что вы хотите.Я бы предложил написать на Perl функцию, которая преобразует упакованное значение в обычное целое число, например:
my $int = unpack( 'c', $bit_field );
Альтернативой может быть добавление столбца инфляции столбца в ваши классы схемы.
__PACKAGE__->inflate_column('mybitField', {
inflate => sub { unpack( 'c*', shift ) },
});
Тем не менее, это по-прежнему не работает для обновлений, и я не знаю простой решение для этого.Я никогда не использовал тип данных BIT в MySQL — обычно я использую столбец CHAR(1).
Кроме того, вы можете получить более точные ответы, если зададите вопрос в списке рассылки DBIC по адресу dbix-class@lists.scsys.co.uk или на канале #dbix-class на irc.perl.org.