2008/3/18 cui robin <<a href="mailto:cuiyuming@gmail.com" target="_blank">cuiyuming@gmail.com</a>>:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
HI,<br>我是昨天问过DBIC数据向JSON转换的家伙,在fayland的提示下,开始使用DBIC中包含的的HashRefInflator模块,将结果先转换成hash,然后再用Catalyst::View::JSON转成JSON。<br>可是我发现个问题,如果我用resultset的find方法,如下:DataDumper可以看出得到一个正确的Hash结果,但是如果使用search得到的结果,其中的内容还是object的,很多冗余信息。<br>
大家有遇到这个问题么?<br><br>#! /usr/bin/perl<br>use lib './';<br>use CBSDB;<br>use Data::Dumper;<br>use DBIx::Class::ResultClass::HashRefInflator;<br><br>my $dsn='dbi:mysql:dbStatus;192.168.182.5';<br>my $user='dbstatus';<br>
my $pass='dbstatus';<br>my $schema = CBSDB->connect($dsn,$user,$pass);<br>$schema->storage->debug(1);<br><br>my $rs_base_mach = $schema->resultset('Base_mach');<br>$rs_base_mach->result_class('DBIx::Class::ResultClass::HashRefInflator');<br>
#$base_mach = [$rs_base_mach->search({'me.app' => 'Penguin'},{join=>'mach_group',prefetch=>'mach_group'})];<br>$base_mach=$rs_base_mach->find('<a href="http://172.24.68.93" target="_blank">172.24.68.93</a>');<br>
print Data::Dumper->Dumper($base_mach);<br><br>robincui<br>
</blockquote></div><br>我尝试昨天fayland说的另外一个方法是可以的,如下:<br>my $rs_base_mach = $schema->resultset('Base_mach');<br>$rs_base_mach->result_class('DBIx::Class::ResultClass::HashRefInflator');<br>@base_mach = $rs_base_mach->search({'me.app' => 'Penguin'},{join=>'mach_group',prefetch=>'mach_group'});<br>
for (@base_mach) {<br> $_ = $_->{_column_data};<br>}<br>print Data::Dumper->Dumper(\@base_mach);<br><br>不明白为什么昨天fayland邮件里说如果有relationship的话会有什么问题么?<br><br>比如 @a = $c->model('X')->all; foreach (@a) { $_ = $_->{_column_data} }<br>
这样。这样的情况是没有 relationship.<br>
有的话,还是去查询 DBIx::Class 的 doc 好了。有个 HashRef 的 模块。<br><br>还有google别人maillist提过相同的问题在:<br><a href="http://lists.scsys.co.uk/pipermail/dbix-class/2008-February/005733.html">http://lists.scsys.co.uk/pipermail/dbix-class/2008-February/005733.html</a><br>
DBIC那位作者,也回复了,但我每天明白他回复的意思,最后似乎他并没有接受别人提供的patch。<br><br><br>