我尝试使用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运行,并且有可能返回大集。
答案 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,这是基于该模块的文档。