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

问题描述 投票:0回答:1

我有一个使用

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

perl dbix-class
1个回答
0
投票

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

在我的

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

© www.soinside.com 2019 - 2024. All rights reserved.