/ / DBICオブジェクトの単一のインスタンス(配列、perl、参照、perl-data-structures、dbix-class)のみを削除

DBICオブジェクトの1つのインスタンス(配列、perl、参照、perl-data-structures、dbix-class)でのみ削除されます

このコードでテーブルエントリを削除できます。

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で複数の単一削除を行うよりも効率的です。