[PerlChina] 关于DBIx::Class::ResultClass::HashRefInflator一点问题
Fayland Lam
fayland at gmail.com
Tue Mar 18 04:17:24 PDT 2008
cui robin wrote:
> 2008/3/18 cui robin <cuiyuming at gmail.com <mailto: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 <http://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 的 模块。
我的意思是,比如你的
#$base_mach = [$rs_base_mach->search({'me.app' =>
'Penguin'},{join=>'mach_group',prefetch=>'mach_group'})];
这里有个 join prefetch
然后用 $_ = $_->{_column_data}, 这个 join prefetch 就没了。
将 DBIC object 转为 hash 一般是用 HashRefInflator
如果行不通的话,就手工转呗。
大不了这么写
my $whatIwant = {
a => $base_mach->a,
b => $base_mach->b,
c => $base_mach->c->real,
之类的。
>
> 还有google别人maillist提过相同的问题在:
> http://lists.scsys.co.uk/pipermail/dbix-class/2008-February/005733.html
> DBIC那位作者,也回复了,但我每天明白他回复的意思,最后似乎他并没有接受
> 别人提供的patch。
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> China-pm mailing list
> China-pm at pm.org
> http://mail.pm.org/mailman/listinfo/china-pm
--
Fayland Lam // http://www.fayland.org/
Foorum based on Catalyst // http://www.foorumbbs.com/
More information about the China-pm
mailing list