Запрос Rose::DB::Object::Manager со списком идентификаторов объектов
Я пытаюсь написать строку запроса Rose::DB::Object, используя Array или Hash, однако я не уверен, как это сделать. Я пытаюсь написать функцию обновления на основе определенных идентификаторов в списке, которые перечислены в массиве. К сожалению, у меня нет другого уникального ключа для фильтрации при построении запроса, поэтому мне нужно запросить конкретные идентификаторы.
По сути, я пытаюсь программно написать следующее:
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 и делать вызовы БД для каждой записи, так как этот скрипт будет запускаться через cron каждые 60 секунд и может возвращать большие наборы.
2 ответа
query
Параметр принимает ссылку на массив пар имя / значение, а не ссылку на массив ссылок на хеш. Если вы хотите объекты, где значение id
столбец является одним из списка значений, затем используйте имя id
и ссылка на массив идентификаторов в качестве значения. Этот код должен работать (при условии, что значения id находятся в @_
):
$list = My::DB::Manager->get_items(query => [ id => \@_ ]);
Вы толкаете струны в @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, это основано на документации модуля.