如何在DBIC中找到未知数量的结果集的并集?

时间:2015-02-05 06:07:42

标签: mysql perl dbix-class

您好我正在使用Helper :: ResultSet :: SetOperations库来查找某些结果集的并集和交集。如果我知道结果集的数量,那么事情就可以正常工作,但是我试图让它适用于未知数量的结果集。

以下处理3'设备'

时有效
my $firstdevice = shift @{$devices};
my $rs1 = $self->search({ 'devices.devicename' => $firstdevice },  {  join => { devicetype => 'devices' },  result_class => 'DBIx::Class::ResultClass::HashRefInflator' } ); 


my $seconddevice = shift @{$devices};
my $rs2 = $self->search({ 'devices.devicename' => $seconddevice },  {  join => { devicetype => 'devices' },result_class => 'DBIx::Class::ResultClass::HashRefInflator' }  );   

my $thirddevice= shift @{$devices};
my $rs3 = $self->search({ 'devices.devicename' => $thirddevice },  {  join => { devicetype => 'devices' },result_class => 'DBIx::Class::ResultClass::HashRefInflator' }  );            

my $data = [$rs1->union([$rs2, $rs3])->all];

但是如果我尝试处理下面未知的数量,我就会

Can't call method "result_class" on unblessed reference at /usr/local/share/perl/5.18.2/DBIx/Class/Helper/ResultSet/SetOperations.pm line 63.

我跑的时候:

my $data = [$rs1->union([@rslist])->all];

以下是我试图让它发挥作用:

#shift off the first device as we still need $rs1
my $firstdevice = shift @{$devices};
my $rs1 = $self->search({ 'devices.devicename' => $firstdevice },  {  join => { devicetype => 'devices' },  result_class => 'DBIx::Class::ResultClass::HashRefInflator' } ); 


my @rslist;

for my $device (@{$devices}) {
    push @rslist, $self->search({ 'devices.devicename' => $device },  {  join => { devicetype => 'devices' },  result_class => 'DBIx::Class::ResultClass::HashRefInflator' } );          
}

my $data = [$rs1->union([@rslist])->all];

1 个答案:

答案 0 :(得分:1)

当您将 - >搜索的返回值推送到@rslist的列表上下文时,搜索不会返回结果集,而是返回由于HRI result_class而产生hashref的结果对象的列表。 使用search_rs可以解决您的问题。

当union接受结果集的arrayref时,我会传递\ @rslist而不是构造一个新的arrayref。