Как я могу использовать бит MySQL при использовании DBIx

StackOverflow https://stackoverflow.com/questions/1665812

  •  13-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь получить доступ к битовому полю 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top