我可以用下面的代码删除表项:
foreach my $id (@$idarray) { #idarray is an array reference
$c->model('My::DB')->find($id)->delete;
}上面的代码只有在@$idarray包含多个值时才有效,但当只包含一个值时就会失败。有什么好点子吗?
当我只删除1个条目时,错误是:
Can't use string ("61") as an ARRAY ref while "strict refs" in use这只是一个例子。表示$id
Idarray值示例:$idarray = [61, 1, 2, 3];
发布于 2013-07-23 14:02:36
错误消息说值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-24 00:55:49
你最好这样做:
$c->model('My::DB')->search({ 'id' => $idarray })->delete_all;DBIx::Class将自动检测您传入的是单个值还是数组ref,并执行正确的操作。这也将为您的数据库生成单个delete语句,这可能比在RDBMS中执行多个单个删除更有效。
https://stackoverflow.com/questions/17802169
复制相似问题