Запрос 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, это основано на документации модуля.

Другие вопросы по тегам