سؤال

أحاول الوصول إلى حقل بت 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 تعود إلى القيمة الثنائية "الخام"، كما هو متوقع. لذلك يبدو أن لديك مشكلة مجموعة أدوات القالب.

أنا لا أعرف ماذا تقصد عن طريق:

[%- IF int(foo.mybitField) %]

لا أعتقد أن TT لديه وظيفة int (). ولن تعمل وظيفة Perl's Int () ما تريده، إما. سيكون اقتراحي إما كتابة وظيفة في بيرل الذي يحول القيمة المعبأة إلى عدد صحيح منتظم، على سبيل المثال:

my $int = unpack( 'c', $bit_field );

بديل لإضافة بعض عمود تضخم العمود إلى فئات المخططات الخاصة بك.

__PACKAGE__->inflate_column('mybitField', {
    inflate => sub { unpack( 'c*', shift ) },
});

ومع ذلك، لا يزال هذا لا يزال يفشل في التحديثات ولا أعرف بسيط حل لذلك. لم أستخدم أبدا نوع البيانات بت نفسي على MySQL - عادة ما أستخدم عمود سحر (1).

أيضا، قد تحصل على إجابات أفضل إذا طلبت من القائمة البريدية DBIC في DBIX-Class@lists.scsys.co.uk أو في قناة DBIX-Class على irc.perl.org.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top