$rs = $db->resultset('Painting')->search({ 'user.name' => 'discipulus', 'comments.text' => { '-in' => ['bad', 'meh'] }, }, { join => { artwork => [ 'artist', { comments => 'user' } ] }, }); while ( my $painting = $rs->next ) { say sprintf('discipulus does not love "%s" (%s)', $painting->artwork->name, $painting->artwork->artist->name, ); }