1

我正在尝试使用 Array 或 Hash 编写 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

现在脚本只是无限期地挂起,没有输出。

我试图避免遍历 DB::Manager 并在每条记录的基础上进行 DB 调用,因为此脚本将每 60 秒通过 cron 运行一次,并且有可能返回大集合。

4

2 回答 2

2

query参数采用对名称/值对数组的引用,而不是对哈希引用数组的引用。如果您想要id列的值是值列表之一的对象,则使用名称id和对 id 数组的引用作为值。此代码应该可以工作(假设 id 值在 中@_):

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

@ary当你需要推入 perl 结构时,你可以推入字符串:

    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 => \@_ ]);
    ...

从未使用过 Rose,这是基于模块的文档。

于 2012-01-23T13:13:40.610 回答