1

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

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];

4

2 に答える 2

4

これを次のように行うとよいでしょう:

$c->model('My::DB')->search({ 'id' => $idarray })->delete_all;

DBIx::Class は、単一の値または配列参照を渡して正しいことを行うかどうかを自動的に検出します。これにより、DB の単一の削除ステートメントも生成されます。これは、RDBMS で複数の単一の削除を行うよりも効率的です。

于 2013-07-23T16:55:49.143 に答える
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;
}
于 2013-07-23T06:02:36.387 に答える