【问题标题】:how to find the union of an unknown number of resultsets in DBIC?如何在 DBIC 中找到未知数量的结果集的并集?
【发布时间】:2015-04-04 21:54:14
【问题描述】:

您好,我正在使用 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];

【问题讨论】:

    标签: mysql perl dbix-class


    【解决方案1】:

    当您将 ->search 的返回值推送到 @rslist 时,这是列表上下文,因此 search 不会返回结果集,而是返回结果对象的列表,这些结果对象是由于 HRI result_class 而成为 hashrefs 的。 改用 search_rs 将解决您的问题。

    由于 union 需要一个结果集的 arrayref,我会传递 \@rslist 而不是构造一个新的 arrayref。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 2017-11-30
      • 2019-11-26
      • 2013-06-16
      • 2020-07-06
      • 2012-01-10
      • 1970-01-01
      相关资源
      最近更新 更多