Как определить, была ли запись найдена или создана: class::dbi find_or_create

Я все еще изучаю Perl и CLASS::DBI. У меня есть скрипт, который выполняет кучу поисков, и я хочу вставить только новые элементы, найденные поисками. Я создал составной ключ для имени пользователя, creat_at, и я использую следующий код, чтобы вставить его в таблицу.

Все работает, но я хотел бы знать, была ли найдена запись или она создала запись. Я подозреваю, что есть простой способ сделать это, но, видимо, я не знаю правильной терминологии для поиска.

Пожалуйста помоги.

Спасибо!

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

1 ответ

Решение

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);
    }
}
Другие вопросы по тегам