Как определить, была ли запись найдена или создана: 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);
}
}