【发布时间】:2012-05-30 04:38:43
【问题描述】:
我正在使用DB::CDBI 类来访问我们应用程序中的数据库。我们的项目使用面向对象的 Perl。
package LT::LanguageImport;
use strict;
use warnings;
use base 'Misk5::CDBI';
__PACKAGE__->table( 'english_text_translation' );
__PACKAGE__->columns( Primary => qw/english language translation/ );
__PACKAGE__->columns( Essential => qw/english language translation/ );
__PACKAGE__->has_a( english => 'LT::EnglishLanguage' );
在这种情况下,我应该检查表中是否存在一行。我在 CDBI 调用中使用内置搜索 API。
sub find_translation {
my $translation_exists_r_not = $class->search(
english => $english,
language => $language,
translation => $translation
);
return;
}
$translation_exists_r_not 正在根据搜索中给出的输入获取预期值。如果该行存在,则_data 将使用行详细信息进行更新。
$translation_exists_r_not = bless({
'_data' => [
{
'language' => 'polish',
'translation' => 'Admin',
'english' => 'admin'
}
],
'_place' => 0,
'_mapper' => [],
'_class' => 'LT::LanguageImport'
},
'Class::DBI::Iterator'
);
如果该行不存在,那么我会得到这样的返回值。
$translation_exists_r_not = bless({
'_data' => [],
'_place' => 0,
'_mapper' => [],
'_class' => 'LT::LanguageImport'
},
'Class::DBI::Iterator'
);
我想根据搜索结果从这个子 find_translation 返回 translation 的值。我无法为此获得最佳状态。
我尝试将_data 复制到一个数组中,但我不确定如何继续。因为_data 将是一个空的arrayref,而另一个条件它将在arrayref 内有一个hashref。
my @Arr = $translation_exists_r_not->{'_data'};
【问题讨论】:
-
@daxim 感谢您编辑问题
-
当你有对象时,你不应该通过解引用直接获取数据;这称为打破封装。相反,在对象上调用适当的方法和访问器。代码示例没有用,因为您没有显示
LT::LanguageImport的类定义。 Edit your question 添加缺失类的代码。 -
我非常同意 daxim 在这里的评论。这肯定不是您编写 OO Perl 的方式。