Hello,

I have a layout, which is like this:

Subject  --> rel_a
   |           |
   V           V
 rel_b   --> object

subject contains only one row with 'blub'
object contains two rows, 'foo' and 'bar'
rel_a connects 'blub' to 'foo'
rel_b connects 'blub' to 'bar'

now I want to create a statement like this:

SELECT subject.*, object_b.* FROM subject
JOIN rel_a ON (subject.title = rel_a.title)
JOIN object object_a ON (rel_a.obj = object_a.title)
JOIN rel_b ON (subject.title = rel_b.title)
JOIN object object_b ON (rel_b.obj = object_b.title)
WHERE object_a.title = 'foo';

My first try was this [1]:

my $s = S->connect('dbi:SQLite:diamond.db');
 
foreach ($s->resultset('subject')
  ->search({
    'object.title' => 'foo'
  }, {
    join => {
      rel_a => 'object'
    }
  })
  ->search(undef, {
    prefetch => {
      rel_b => 'object'
    }
  })->all()
) {
  # should return bar, but it returns foo
  print $_->rel_b->first->object->title, "\n";
}

Did I do something wrong?

Thanks,
  Gerhard

[1] http://gist.github.com/106183

Attachment: signature.asc
Description: Digital signature

_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]

Reply via email to