[Catalyst] Nested calls to model does not work?

Alex Povolotsky tarkhil at over.ru
Mon Mar 31 10:19:30 BST 2008


Hello!

I've experienced strange problem displaying data. Minimal test case is 
fairly big, I can attach it here, but will try to extract most important 
information.

Creating database (Pg)

create table parent (pid serial primary key, name varchar(64));
create table child (cid serial primary key, pid int not null references 
parent(pid), name varchar(64));
create table record (rid serial primary key, cid int not null references 
child(cid), message varchar(64));
insert into parent (name) values('parent');
insert into child (pid, name) values (1, 'child');
insert into record (cid, message) values (1, 'message one');
insert into record (cid, message) values (1, 'message two');

creating model and view

script/testcase_create.pl model Main DBIC::Schema Testcase::Schema 
create=static dbi:Pg:dbname=testcase testcase
script/testcase_create.pl view Main TTSite

in Root controller, writing trivial

sub index : Local {
    my ( $self, $c ) = @_;
    $c->stash->{parent} = $c->model('Main::Parent')->search();
}

in index template, everything is trivial as well

[% META title = 'index' %]
<ul>
[% WHILE (p = parent.next) %]
parent [% p.name %] has [% p.children.count %] children,
   <ol>
   [% WHILE (child = p.children.next) %]
   <li> [% child.name %] has [% child.records.count %] records,
      <ul>
      [% WHILE (record = child.records.next) %]
         <li>[% record.message %]
      [% END %]
      </ul>
   [% END %]
   </ol>
[% END %]
</ul>

Output is disappointing

index

   parent parent has children,

   © 2008 Your Name Here

while we get

SELECT me.pid, me.name FROM parent me:
SELECT me.cid, me.pid, me.name FROM child me WHERE ( me.pid = ? ): '1'
SELECT me.cid, me.pid, me.name FROM child me WHERE ( me.pid = ? ): '1'

with DBIC_TRACE.

Attempt to dump (using Plugin::Dumper) p.children yields reasonable result.

What am I doing wrong?

Alex.





More information about the Catalyst mailing list