我想写下面的逻辑。如果整个循环成功(即,如果转换了循环对象的数组的每个元素),那么应该遵循数据库操作(提交)。
我写了以下内容:
if ($room->save ){ # this line i cant modify
for ( @{ $room->members } ) {
if ( $_->save ){
$room->ds->commit;
} else {
return $c->render_ng_json("fail");
}
}
我的问题是,在我的代码中,每次$ _->保存成功时,都会应用数据库操作,这太贵了。如果有12个成员并且每个成功保存,则将有12次尝试提交。我希望perl分析整个循环是否没有错误(也就是说,如果每个成员都被保存),并且仅在这种情况下,执行提交。如何写这个逻辑?
答案 0 :(得分:2)
怎么样:
if ($room->save ){ # this line i cant modify
for ( @{ $room->members } ) {
return $c->render_ng_json("fail") unless $_->save ;
}
$room->ds->commit;
}
如果你想做部分提交:
if ($room->save ){ # this line i cant modify
my $failed = 0;
for ( @{ $room->members } ) {
$failed = 1 unless $_->save ;
}
$room->ds->commit;
return $c->render_ng_json("fail") if $failed ;
}
答案 1 :(得分:1)
您可能需要沿着这些方向的逻辑:
for my $item (@items) {
$item->stage or die "Some error";
}
$transaction->commit;
答案 2 :(得分:1)
离开提交,直到你失败(如果那是你真正想要的,否则删除下面的注释行)或直到完成所有保存:
if ( $room->save ) {
for ( @{ $room->members } ) {
if ( ! $_->save ) {
$room->ds->commit; # possibly remove.
return $c->render_ng_json("fail");
}
$room->ds->commit;
}