Запрос Rose :: DB :: Object :: Manager со списком идентификаторов объектов - PullRequest
1 голос
/ 23 января 2012

Я пытаюсь написать строку запроса 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 ]

2 голосов
/ 24 января 2012

Параметр query принимает ссылку на массив пар имя / значение, а не ссылку на массив ссылок на хеш.Если вам нужны объекты, в которых значение столбца id является одним из списка значений, используйте в качестве значения имя id и ссылку на массив ids.Этот код должен работать (при условии, что значения идентификатора находятся в @_):

$list = My::DB::Manager->get_items(query => [ id => \@_ ]);
0 голосов
/ 23 января 2012

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

...