【发布时间】:2015-04-04 04:54:24
【问题描述】:
我正在使用 DBIx::Class 和 Template Toolkit 开发一个 Catalyst 应用程序;在我遇到问题的特定部分中,我通过在我的 ResultSet 架构中调用以下函数获得了一个结果集:
sub Divisions_and_teams_in_season { 我的 ($self, $season, $grid) = @_; 返回 $self->搜索({ "division_seasons.season" => $season->id, "division_seasons.fixtures_grid" => $grid->id, }, { 预取 => [ "division_seasons", { "team_seasons" => { “团队” => [{ “俱乐部” => “场地” }, “回家之夜” ] } } ], order_by => { -asc => [qw(division_seasons.rank team_seasons.grid_position club.short_name team.name)] } }); }这会按我的预期返回数据,并且我可以在我的 Controller 代码中执行以下操作来取回我的结果集并遍历 team_seasons:
我的 $divisions = [ $c->model("DB::Division")->divisions_and_teams_in_season($current_season, $c->stash->{grid}) ]; foreach 我的 $division (@{ $divisions }) { $c->log->debug($division->team_seasons->grid_positions_filled); # 这是因为 $division->team_seasons 是一个结果集对象 }但是,在我的模板中(已隐藏 $divisions),我无法访问 grid_positions_filled 对象,因为 division.team_seaons 为我提供了该部门中团队结果集的数组引用:
我在控制器中获得的相同调试日志的输出更像是结果集对象的列表:
TopTable::Model::DB::TeamSeason=HASH(0x6eea94c) TopTable::Model::DB::TeamSeason=HASH(0x6f01834) TopTable::Model::DB::TeamSeason=HASH(0x6ef5284) TopTable::Model::DB::TeamSeason=HASH(0x6efec9c) TopTable::Model::DB::TeamSeason=HASH(0x6ef4dc4) TopTable::Model::DB::TeamSeason=HASH(0x6faf0ac) TopTable::Model::DB::TeamSeason=HASH(0x6eefa04)希望这一切都有意义!有谁知道我如何将控制器的行为放入模板中,以便我可以访问 team_season ResultSet 上的方法?
非常感谢您。
【问题讨论】:
-
看起来像标量与列表上下文问题。尝试
team_seasons_rs强制返回列表上下文中的结果集。 -
对不起@nwellnhof,我不确定我是否关注 - 我应该把
team_seasons_rs放在哪里?据我了解,team_seasons指的是两个表之间的关系名称,team_seasons_rs不是有效的关系名称? -
DBIC 还创建了一个特殊版本的关系访问器,后缀为
_rs。见the docs。 -
啊,我明白了,太好了,非常感谢! (如果您将其发布为答案,我认为我可以接受?Stack Overflow 的新手(不仅仅是潜伏!)
标签: perl catalyst dbix-class template-toolkit