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 に答える