(Аналогично, но с более конкретными деталями, #11526999)
Мои классы результатов были созданы с использованием dbicdump
, однако я хочу перегрузить метод доступа по умолчанию для поля date
.
Работает, но фигня
Чтобы проверить мою идею, я просто добавил атрибут accessor
к созданному ключу date
вызова add_columns
:
__PACKAGE__->add_columns(
"stamp_id",
{
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
sequence => "timestamp_stamp_id_seq",
},
"date",
{ data_type => "date", is_nullable => 0, accessor => '_date' },
);
... и создал мою процедуру доступа под строкой контрольной суммы Schema::Loader:
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:nB5koMYAhBwz4ET77Q8qlA
sub date {
my $self = shift;
warn "overloaded date\n"; # Added for debugging
my $date;
# The date needs to be just the date, not the time
if ( @_ ) {
$date = shift;
if ( $date =~ /^([\d\-]+)/ ) {
$date = $1
}
return $self->_date($date)
}
# Fetch the column value & remove the time part.
$date = $self->_date;
if ( $date =~ /^([\d\-]+)/ ) {
$date = $1
}
return $date;
}
Это работает, так как возвращает ожидаемое 2014-10-04
, но это обман.
Делай это правильно
Проблема в том, что я взломал код контрольной суммы, поэтому я не могу аккуратно повторно сгенерировать свои объекты класса.
Чтение ResultSource и CookBook выглядит следующим образом:
Стандартно создайте ResultSource с помощью dbicdump
:
__PACKAGE__->add_columns(
"stamp_id",
{
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
sequence => "timestamp_stamp_id_seq",
},
"date",
{ data_type => "date", is_nullable => 0 },
);
.... добавьте изменить метод доступа под строкой, используя +
, чтобы указать, что это изменение существующего определения:
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:nB5koMYAhBwz4ET77Q8qlA
__PACKAGE__->add_columns(
"+date", { accessor => '_date' },
);
.... используйте метод перегрузки, как и раньше
Не работает.
Я дважды проверил свое правописание, я попробовал add_column
, а не add_columns
, и я попытался поставить второй add_columns
непосредственно под первым - теперь все работает.... код использует метод доступа по умолчанию и возвращает 2014-10-04T00:00:00
Как переопределить метод доступа по умолчанию, чтобы я мог использовать свой собственный метод?
Спасибо...