【发布时间】:2013-06-08 01:18:48
【问题描述】:
我正在使用DBIx::Class::ResultSet 来查询项目并对我的数据进行分页。这是我使用的查询:
my $clients = $c->model('DB::User')->search(
{ active_yn => 'y', client_yn => 'y' },
{
columns => [qw/id first_name last_name username email/],
order_by => ['last_name'],
page => ($c->req->param('page') || 1),
rows => 20,
}
);
一旦我得到结果集,我会像这样在Template::Toolkit 中循环遍历结果:
[% WHILE (client = clients.next) %]
<tr>
<td>[% client.first_name %] [% client.last_name %]</td>
</tr>
[% END %]
我的问题是,每次我拨打next 时都会发出新的查询吗?我不清楚,因为all 方法说它返回集合中的所有元素,那么第一个查询不这样做吗?我想尽可能高效。谢谢!
【问题讨论】:
-
在您的环境中设置 DBIC_TRACE=1,然后运行查询。您将看到正在生成的 SQL,并通过一些调试日志记录,您将能够将数据库访问与模型、视图或控制器操作相关联。
-
这是个好建议。你知道我在哪里可以看到 DBIC_TRACE 的输出吗?我没有运行测试服务器,所以它不会进入 STDOUT。我用的是 nginx 和 fastcgi 都找不到。
-
在开发/测试服务器下试一试。
-
但输出通常会发送到 STDOUT,通常会发送到 Web 服务器上的错误日志。
-
是的,Apache 通常就是这样。但是使用 nginx 我检查 /var/log/nginx/error.log 并没有显示任何查询。
标签: perl catalyst dbix-class