このコードでテーブルエントリを削除できます。
foreach my $id (@$idarray) { #idarray is an array reference
$c->model("My::DB")->find($id)->delete;
}
上記のコードは、@ $ idarrayが複数の値を保持している場合にのみ機能しますが、1つの値のみが含まれている場合は失敗します。いくつかのアイデアみんな?
1つのエントリのみを削除した場合のエラー:
Can"t use string ("61") as an ARRAY ref while "strict refs" in use
61ほんの一例です。 $ idを表します
サンプルidarray値: $idarray = [61, 1, 2, 3];
回答:
回答№1は1エラーメッセージは、値61が配列参照として使用されていることを示しています。つまり、単一の値の場合は、 $idarray
配列参照ではなく、1つの値のみが含まれています。つまり、
if( ref $idarray eq "ARRAY") {
foreach my $id (@$idarray) { #idarray is an array reference
$c->model("My::DB")->find($id)->delete;
} else{
$c->model("My::DB")->find( $idarray )->delete;
}
回答№2については4
これは次のように実行できます。
$c->model("My::DB")->search({ "id" => $idarray })->delete_all;
DBIx ::クラスは、単一の値を渡すか配列参照を渡すかを自動的に検出し、正しいことを行います。また、これにより、DBに対して単一の削除ステートメントが生成されます。これは、RDBMSで複数の単一削除を行うよりも効率的です。