在DBIx :: Class ResultSource上使用new()方法创建(可能是临时的)变量时,它似乎不会使用DBIC模式中指定的默认值填充属性(我们已指定用于从中创建表)模式).
目前,我们正在为一个这样的类创建一个默认值(第一种情况,这是一个问题)
sub new { my $class = shift; my $self = $class->next::method(@_); $self->queue('DEFAULT_QUEUE_VAL') unless $self->queue(); return $self; }
在该类中(即属性queue => DEFAULT_QUEUE_VAL).但是,从长期来看,我们有几个具有各种默认值的DBIC类,我们希望避免为所有各种情况复制上述逻辑.
解决方法
看起来没有DBIC组件,你可以使用现有代码的一个小mod来实现:
sub new { my $class = shift; my $self = $class->next::method(@_); foreach my $col ($self->result_source->columns) { my $default = $self->result_source->column_info($col)->{default_value}; $self->$col($default) if($default && !defined $self->$col()); return $self; }
由于这是直截了当的,因此组件没有多大意义.