Voorkomen karper :: carp message in DBIx :: Class :: ResultSource prefetch

In een clienttoepassing heb ik een DBIx :: Class-model 'Todo' dat kan worden gekoppeld aan een aantal andere modellen die een veel-op-veel-relatie gebruiken. Ik weet dat, vanwege bedrijfslogica, dat 1 en slechts 1 buitenlandse model eraan gekoppeld is. Ik wil dat model in mijn vraag ophalen met behulp van:

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

Net als de documentatiestaten waarschuwt DBIx :: Class :: ResultSource hierom:

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

Kan iemand mij vertellen hoe ik deze fout kan voorkomen zonder zijn toevlucht te nemen tot het bewerken van DBIx :: Class :: ResultSource zelf? Ik zie geen andere manier om te doen wat ik wil en wil voorkomen dat de toepassing veel waarschuwingen in het logboek dumpt. Ik heb geprobeerd met @CARP_NOT en $ Carp te spelen: Intern, maar ik kan Carp er niet van weerhouden om deze waarschuwing over te slaan (de documentatie hierover is op zijn best dun)

Als iemand me zou kunnen helpen, zou dat geweldig zijn, bedankt

1

2 antwoord

U kunt de standaardbehandeling van waarschuwingssignalen negeren om deze specifieke waarschuwing te onderscheppen en te negeren:

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

of, als je wilt,

$SIG{__WARN__} = sub {
  warn $_[0] unless $_[0] =~ m/Prefetching multiple has_many rels accountbalances_todos/
};
2
toegevoegd
Bedankt jongens, ik heb de waarschuwingen met het bovenstaande kunnen doden. Goed spul!
toegevoegd de auteur Rob Boerman, de bron

DBIx::Class uses carp() function from DBIx::Class::Carp module not from Carp. So @CARP_NOT and $Carp::Internal not working. Use $SIG{__WARN__} instead.

1
toegevoegd
Ah, goed punt. Ik was aan het graven in Carp
toegevoegd de auteur Rob Boerman, de bron