2008/3/18 cui robin &lt;<a href="mailto:cuiyuming@gmail.com" target="_blank">cuiyuming@gmail.com</a>&gt;:<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 &#39;./&#39;;<br>use CBSDB;<br>use Data::Dumper;<br>use DBIx::Class::ResultClass::HashRefInflator;<br><br>my $dsn=&#39;dbi:mysql:dbStatus;192.168.182.5&#39;;<br>my $user=&#39;dbstatus&#39;;<br>


my $pass=&#39;dbstatus&#39;;<br>my $schema = CBSDB-&gt;connect($dsn,$user,$pass);<br>$schema-&gt;storage-&gt;debug(1);<br><br>my $rs_base_mach = $schema-&gt;resultset(&#39;Base_mach&#39;);<br>$rs_base_mach-&gt;result_class(&#39;DBIx::Class::ResultClass::HashRefInflator&#39;);<br>


#$base_mach = [$rs_base_mach-&gt;search({&#39;me.app&#39; =&gt; &#39;Penguin&#39;},{join=&gt;&#39;mach_group&#39;,prefetch=&gt;&#39;mach_group&#39;})];<br>$base_mach=$rs_base_mach-&gt;find(&#39;<a href="http://172.24.68.93" target="_blank">172.24.68.93</a>&#39;);<br>


print Data::Dumper-&gt;Dumper($base_mach);<br><br>robincui<br>
</blockquote></div><br>我尝试昨天fayland说的另外一个方法是可以的,如下:<br>my $rs_base_mach = $schema-&gt;resultset(&#39;Base_mach&#39;);<br>$rs_base_mach-&gt;result_class(&#39;DBIx::Class::ResultClass::HashRefInflator&#39;);<br>@base_mach = $rs_base_mach-&gt;search({&#39;me.app&#39; =&gt; &#39;Penguin&#39;},{join=&gt;&#39;mach_group&#39;,prefetch=&gt;&#39;mach_group&#39;});<br>
for (@base_mach) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $_ = $_-&gt;{_column_data};<br>}<br>print Data::Dumper-&gt;Dumper(\@base_mach);<br><br>不明白为什么昨天fayland邮件里说如果有relationship的话会有什么问题么?<br><br>比如 @a = $c-&gt;model(&#39;X&#39;)-&gt;all; foreach (@a) { $_ = $_-&gt;{_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>