【发布时间】:2019-04-08 21:59:53
【问题描述】:
(类似于#11526999,但有更具体的细节)
我的结果类是使用dbicdump 构建的,但是我希望重载date 字段的默认访问器。
有效,但有问题
为了hackytest我的想法,我只是在add_columns 调用的创建的date 键中添加了一个accessor 属性:
__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,但它是一个错误。
以正确的方式做事
问题是我已经破解了校验和代码,所以我不能巧妙地重新生成我的 Class 对象。
阅读ResultSource 和CookBook 正确的方法似乎是:
将dbicdump 构建的 ResultSource 作为标准:
__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
如何覆盖默认访问器,以便使用自己的方法?
谢谢...
【问题讨论】:
标签: perl dbix-class