在客户端应用程序中,我有一个DBIx :: Class模型'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跳过这个警告(关于这个的文档最多是稀疏的)
如果有人能帮助我,那将是非常棒的,谢谢
答案 0 :(得分:2)
您可以覆盖警告信号的默认处理以捕获并忽略此特定警告:
$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/
};
答案 1 :(得分:1)
DBIx::Class
使用carp()
模块中的DBIx::Class::Carp
函数而不是Carp
。因此@CARP_NOT
和$Carp::Internal
无效。而是Use $SIG{__WARN__}
。