1

配列またはハッシュを使用して Rose::DB::Object クエリ文字列を記述しようとしていますが、その方法がわかりません。配列に列挙されているリスト内の特定の ID に基づいて更新関数を作成しようとしています。残念ながら、クエリを作成するためにフィルタリングする一意のキーが他にないため、特定の ID をクエリする必要があります。

基本的に、私はプログラムで次のように書こうとしています:

my $list = My::DB::Manager->get_items(query => [
     {id => 1},
     {id => 14},
     {id => 210},
     {id => 1102},
     {id => 3151},
]);

これは私がこれまでに持っているコードですが、私がやろうとしていることをうまく達成できませんでした:

        use My::DB::Manager;
        my @ary;
        foreach (@_) {
            my %col = ("id", $_);
            push (@ary, \%col);
        }
        my $list = My::DB::Manager->get_items(query => \@ary);
        ...

./test.pl

これで、スクリプトは無期限に出力なしでハングします。

このスクリプトは 60 秒ごとに cron を介して実行され、大きなセットを返す可能性があるため、DB::Manager を反復処理してレコードごとに DB 呼び出しを行うことを避けようとしています。

4

2 に答える 2

2

このqueryパラメーターは、ハッシュ参照の配列への参照ではなく、名前と値のペアの配列への参照を取ります。id列の値が値のリストの 1 つであるオブジェクトが必要な場合は、名前idと ID の配列への参照を値として使用します。このコードは動作するはずです (id 値が にあると仮定@_):

$list = My::DB::Manager->get_items(query => [ id => \@_ ]);
于 2012-01-24T05:25:42.830 に答える
0

@aryperl 構造をプッシュする必要がある場合は、文字列をプッシュします。

    use My::DB::Manager;
    my @ary;
    foreach (@_) {
            push (@ary, { id => $_ });
    }
    my $list = My::DB::Manager->get_items(query => [@ary]);
    ...

ただし、使用できると思いますquery => [ id => [$id1, $id2, ... ], ...]

    use My::DB::Manager;
    my $list = My::DB::Manager->get_items(query => [ id => \@_ ]);
    ...

これはモジュールのドキュメントに基づいています。

于 2012-01-23T13:13:40.610 に答える