Arrays 不能仅在DBIC对象的一个实例上删除

Arrays 不能仅在DBIC对象的一个实例上删除,arrays,perl,reference,perl-data-structures,dbix-class,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 u

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

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]

错误消息说值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;
}

错误消息说值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;
}

您可以通过以下方式更好地执行此操作:

$c->model('My::DB')->search({ 'id' => $idarray })->delete_all;

类将自动检测是否传入单个值或数组ref,并执行正确的操作。这还将为数据库生成一条delete语句,这可能比在RDBMS中执行多条delete语句更有效。

您可以通过以下方式更好地执行此操作:

$c->model('My::DB')->search({ 'id' => $idarray })->delete_all;


类将自动检测是否传入单个值或数组ref,并执行正确的操作。这还将为数据库生成一条delete语句,这可能比在RDBMS中执行多条delete语句更有效。

失败时会收到什么错误消息?不能使用字符串6161,即$id作为数组引用,而使用严格引用。您还可以显示输入值吗,此数组引用包含在包含多个值时发生的情况。它只包含数字,普通数字。id号失败时您收到了什么错误消息?不能使用字符串6161,即$id作为数组引用,而使用的是严格引用。您还可以显示输入值,此数组引用包含在包含多个值的情况下所包含的内容。它只包含数字,普通数字。id numbers是的,我发现通过对单个值进行var转储,它不会返回数组引用,而只返回单个字符串。但在您的回答中,eq‘ARRAY’是否也可以检测数组引用?是的,请查看ref函数。ref$idarray将告诉您它是否为数组引用。哦,错过了您的‘ref’部分谢谢,伙计,现在修复了它:dddddddddd是的,我发现通过对单个值进行var转储,它不会返回数组引用,而只返回单个字符串。但在您的回答中,eq‘ARRAY’是否也可以检测数组引用?是的,请查看ref函数。ref$idarray将告诉您它是否为数组引用。哦,错过了您的‘ref’部分谢谢,伙计,现在修复了它:谢谢,我要试试这个汉克,我要试试这个