我可以使用以下代码删除表条目:
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];
答案 0 :(得分:4)
你最好这样做:
$c->model('My::DB')->search({ 'id' => $idarray })->delete_all;
DBIx :: Class将自动检测您是传入单个值还是数组引用并执行正确的操作。这也将为您的数据库生成一个删除语句,这可能比在RDBMS中执行多个单个删除更有效。
答案 1 :(得分: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;
}