在客户机应用程序中,我有一个dbix::类模型“todo”,它可以使用多对多关系链接到许多其他模型。
我知道,由于业务逻辑,只有1个外国模型与之关联。我想在查询中使用以下方法获取该模型:

my $objects = $c->model('DB')->resultset('Todo')->search($myFilter,{
    prefetch => \@relations # contains all possible relations
});

正如文档中所述,dbix::class::resultsource对此发出警告:
DBIx::Class::ResultSet::next(): Prefetching multiple has_many rels accountbalances_todos and accounts_todos at top level will explode the number of row objects retrievable via ->next or ->all. Use at your own risk. at /media/psf/projects/.../Controller/Todo.pm line 117

有人能告诉我如何在不编辑dbix::class::resultsource本身的情况下防止这个错误吗?我看不到其他方法可以做我想做的事情,我想阻止应用程序在日志中转储大量警告。我试过摆弄@carp掴not和$carp::internal,但是无法让carp跳过这个警告(关于这个的文档最多是稀疏的)
如果有人能帮我那就太棒了,谢谢

最佳答案

您可以覆盖警告信号的默认处理,以捕获并忽略此特定警告:

$SIG{__WARN__} = sub {
  my $warn_msg = $_[0];
  if ( $warn_msg =~ m/Prefetching multiple has_many rels accountbalances_todos/ ) {
    # do nothing
  } else {
    warn $warn_msg;
  }
};

或者,如果你愿意,
$SIG{__WARN__} = sub {
  warn $_[0] unless $_[0] =~ m/Prefetching multiple has_many rels accountbalances_todos/
};

08-06 21:47