2012-06-24 60 views
1

在客戶端應用程序中,我有一個DBIx :: Class模型'Todo',它可以使用多對多關係。 由於業務邏輯的原因,我知道只有1個外部模型與其鏈接。我想用去取我的查詢該型號:防止DBIx :: Class :: ResultSource預取中的Carp :: carp消息

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

文檔國家一樣DBIx ::類:: 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和$鯉魚::內部擺弄,但不能從跳過此警告得到鯉魚(這個文件是稀疏的最好)

如果有人可以幫助我,將是真棒,謝謝

回答

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/ 
}; 
+0

謝謝你們,我設法殺死了上面的警告。好東西! –

1

DBIx::Class使用carp()函數從DBIx::Class::Carp模塊不從Carp。所以@CARP_NOT$Carp::Internal不起作用。代替Use $SIG{__WARN__}

+0

啊,好點。我正在挖鯉魚 –