我有下面的代碼:如何在發生異常時訪問數據庫數據?
my $savepoint = $c->db->txn_scope_guard;
return $self->render('subnet/create', error => [ create => [email protected] ],
servers => $self->rows('Server')->lookup,
) unless $subnet = eval{ $self->rows('Subnet')->create($subnet) };
$savepoint->commit;
這裏rows
是Mojolicious幫手,提供對數據的訪問。
sub model {
my($c, $table_name) = (shift,shift);
return $c->db->resultset($table_name);
}
而且->db
也是幫手:
sub db { return $schema
//= DBIx::Class::Schema->connect($DB->{ DSN }, @$DB{ qw/ USER PASS/}, {
AutoCommit => 1,
RaiseError => 1,
quote_char => '"',
})
});
當我創建$subnet
並且發生唯一約束(這裏有無論哪個約束出現,實際上任何異常的情況下),我得到了錯誤:
這是當我發現異常與eval{ ... }
當前交易被中止,我不能做$self->rows('Server')->lookup
有沒有辦法在異常發生後訪問服務器數據?
爲什麼不在創建之前進行查找? – xxfelixxx
,因爲當用戶選擇「POST」時,我不需要查找數據。只有在渲染形式爲'subnet/create'時我需要查找。 –