Rose :: DB :: Object :: Manager查询,包含对象ID列表

时间:2012-01-23 12:14:37

标签: perl rose-db-object

我尝试使用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并在每个记录的基础上进行数据库调用,因为这个脚本将每隔60秒通过cron运行,并且有可能返回大集。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

当您需要推送perl结构时,将字符串推送到@ary

    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,这是基于该模块的文档。