首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能仅删除DBIC对象的一个实例

不能仅删除DBIC对象的一个实例
EN

Stack Overflow用户
提问于 2013-07-23 13:34:08
回答 2查看 49关注 0票数 1

我可以用下面的代码删除表项:

代码语言:javascript
运行
复制
foreach my $id (@$idarray) { #idarray is an array reference
$c->model('My::DB')->find($id)->delete;
}

上面的代码只有在@$idarray包含多个值时才有效,但当只包含一个值时就会失败。有什么好点子吗?

当我只删除1个条目时,错误是:

代码语言:javascript
运行
复制
Can't use string ("61") as an ARRAY ref while "strict refs" in use

这只是一个例子。表示$id

Idarray值示例:$idarray = [61, 1, 2, 3];

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-23 14:02:36

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

代码语言:javascript
运行
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-24 00:55:49

你最好这样做:

代码语言:javascript
运行
复制
$c->model('My::DB')->search({ 'id' => $idarray })->delete_all;

DBIx::Class将自动检测您传入的是单个值还是数组ref,并执行正确的操作。这也将为您的数据库生成单个delete语句,这可能比在RDBMS中执行多个单个删除更有效。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17802169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档