我有一个使用
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
。