DBIx::类如何在创建时检索生成的UUID ?



我有一个使用DBIx::Class的应用程序,目前当我创建一个对应于表的对象时,我得到了该对象,但id列将被设置为0,而不是在数据库级别上生成的UUID。当我创建一个新记录时,我如何正确地检索id列?

这是我的表:

CREATE TABLE IF NOT EXISTS log (
id VARCHAR(36) DEFAULT (UUID()) PRIMARY KEY,
...

下面是我的DBIx::Class模式:

__PACKAGE__->load_components(qw/InflateColumn::DateTime PK::Auto Core/);
__PACKAGE__->table('log');
__PACKAGE__->add_columns(
id => {
data_type         => 'varchar',
size              => 36,
unique            => 1,
is_auto_increment => 1
},
qw/.../ # other columns
);
__PACKAGE__->set_primary_key('id');

当我去插入,像(log_repository是我的结果集):

my $log = $self->log_repository->create($json);
print $log->get_column('id'); # 0 instead of valid UUID

如何在创建时检索UUID?

我找到了一种方法来解决它,虽然它不是很漂亮,而且远非我想做的,但它有效。

在我的ResultSet类中,我重写了create方法,以便在执行超类创建之前将预生成的UUID附加到id字段,如下所示:

sub create {
my $self = shift;
my $qry  = shift;
return $self->SUPER::create( { %{$qry}, id => Data::UUID->new->create_str } );
}

然后我可以像往常一样调用create,并获得id

最新更新