0

我还在学习 Perl 和 CLASS::DBI。我有一个执行一堆查找的脚本,我只想插入查找找到的新项目。我为 username,created_at 创建了一个复合键,并使用以下代码将其插入到表中。

一切正常,但我想知道是否找到了记录或是否创建了记录。我怀疑有一种简单的方法可以做到这一点,但显然我不知道要搜索的正确术语。

请帮忙。

谢谢!

eval {
    FEED::COLLECTION->find_or_create({
        username => $user->{username},
        created_at => $status->{created_at},
        status => $status->{text}
    });
};
if ($@) {
    warn $@;
}
4

1 回答 1

3

Class::DBI不记得对象是通过什么途径实例化的,我认为想知道表明一个人提出了错误的问题,需要重新表述一个人试图解决的问题。

但是,如果您真的觉得需要知道,请不要使用find_or_create. 它没有做任何特别聪明的事情。这只是一个方便的例程。所以重新实现它并将对象注释为已找到:

sub my_find_or_create {
    my $class    = shift;
    my $hash     = ref $_[0] eq "HASH" ? shift: {@_};
    my ($exists) = $class->search($hash);

    if (defined $exists) {
        $exists->{_I_found_this_in_the_back} = 1; # or whatever means of noting preexistence you favor
        return $exists;
    } else {
        return $class->insert($hash);
    }
}
于 2011-07-26T23:53:54.823 回答