无法仅删除DBIC对象的一个​​实例

时间:2013-07-23 05:34:08

标签: arrays perl reference 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];

2 个答案:

答案 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;
}