[PerlChina] 关于DBIx::Class::ResultClass::HashRefInflator一点问题

cui robin cuiyuming at gmail.com
Tue Mar 18 03:06:54 PDT 2008


2008/3/18 cui robin <cuiyuming at gmail.com>:

> HI,
>
> 我是昨天问过DBIC数据向JSON转换的家伙,在fayland的提示下,开始使用DBIC中包含的的HashRefInflator模块,将结果先转换成hash,然后再用Catalyst::View::JSON转成JSON。
>
> 可是我发现个问题,如果我用resultset的find方法,如下:DataDumper可以看出得到一个正确的Hash结果,但是如果使用search得到的结果,其中的内容还是object的,很多冗余信息。
> 大家有遇到这个问题么?
>
> #! /usr/bin/perl
> use lib './';
> use CBSDB;
> use Data::Dumper;
> use DBIx::Class::ResultClass::HashRefInflator;
>
> my $dsn='dbi:mysql:dbStatus;192.168.182.5';
> my $user='dbstatus';
> my $pass='dbstatus';
> my $schema = CBSDB->connect($dsn,$user,$pass);
> $schema->storage->debug(1);
>
> my $rs_base_mach = $schema->resultset('Base_mach');
> $rs_base_mach->result_class('DBIx::Class::ResultClass::HashRefInflator');
> #$base_mach = [$rs_base_mach->search({'me.app' =>
> 'Penguin'},{join=>'mach_group',prefetch=>'mach_group'})];
> $base_mach=$rs_base_mach->find('172.24.68.93');
> print Data::Dumper->Dumper($base_mach);
>
> robincui
>

我尝试昨天fayland说的另外一个方法是可以的,如下:
my $rs_base_mach = $schema->resultset('Base_mach');
$rs_base_mach->result_class('DBIx::Class::ResultClass::HashRefInflator');
@base_mach = $rs_base_mach->search({'me.app' =>
'Penguin'},{join=>'mach_group',prefetch=>'mach_group'});
for (@base_mach) {
        $_ = $_->{_column_data};
}
print Data::Dumper->Dumper(\@base_mach);

不明白为什么昨天fayland邮件里说如果有relationship的话会有什么问题么?

比如 @a = $c->model('X')->all; foreach (@a) { $_ = $_->{_column_data} }
这样。这样的情况是没有 relationship.
有的话,还是去查询 DBIx::Class 的 doc 好了。有个 HashRef 的 模块。

还有google别人maillist提过相同的问题在:
http://lists.scsys.co.uk/pipermail/dbix-class/2008-February/005733.html
DBIC那位作者,也回复了,但我每天明白他回复的意思,最后似乎他并没有接受别人提供的patch。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/china-pm/attachments/20080318/db3c55d3/attachment.html 


More information about the China-pm mailing list