Как определить, была ли запись найдена или создана: class :: dbi find_or_create - PullRequest
0 голосов
/ 27 июля 2011

Я все еще изучаю 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 Ответ

3 голосов
/ 27 июля 2011

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...