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 将自动检测您是否传入单个值或数组 ref 并做正确的事情。这还将为您的数据库生成一个删除语句,这可能比在您的 RDBMS 中执行多个单个删除更有效。

于 2013-07-23T16:55:49.143 回答
1

错误消息说值 61 被用作数组引用,这意味着在单个值的情况下,我认为$idarray只包含一个值,而不是数组引用,这意味着尝试这样做

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 回答