Hello,
I hope everyone is having a good day.  I've been pulling my hair out
about this issue for a while and I hope someone can help me.  First let
me commend the authors for DBIx,  after 8 years of witting sql I'm
getting pretty sick of it, thank you.

I have a two layered system:
first perl module called pcGame.pm that handles business logic
and a second module called PocketCombat.pm that handles the data access
layer

OO'ish style to separate the Data Objects from the Business Objects.
Obviously I integrated DBIx into my Data Objects.  Everything was going
fine until I started building collections (object factories).

I want to gather all games from a certain customer (similar to gathering
all books from an author, from the common examples).

pcGame.pm:
.....
$games = PocketDO::PocketCombat->find( -owner => $profile );
......

($games is an array ref of all the game objects that are owned by a profile)

PocketCombat.pm
.....
  my $rs = $self->_dataRs->search(
                                   {
                                       'me.profile' => $in{-owner}->id
                                   },
                                   );

   my @games;
   while (my $game_rs = $rs->next) {
       my $game = __PACKAGE__->_new($pkg);
       $game->{data} = $game_rs;
       $game->{id} = $game->{data}->gameid;
       push @games, $game;
   }
return [EMAIL PROTECTED];


When I start to query the data in pcGame.pm I get this error
Can't call method "source" on an undefined value at
/usr/lib/perl5/site_perl/5.8.8/DBIx/Class/ResultSource.pm line 907.

Everything in $game->{data} works great until it is returned back to
pcGame.pm

It looks like part of the resultset data structure vanishes, in
particular the 'schema' object reference.
This is what a Dumper of the first element of the array looks like
before it is returned:
http://www.patnjay.org/pre_return_datastructure.txt
and right after it is returned it looks like this
http://www.patnjay.org/post_return_datastructure.txt

The only change between the two dumps is that 'schema' => undef

I have found two roundabout solutions that I don't like.  If in the Data
layer while looping through the rs->next, I call all my accessors that I
plan on using
$game->type;
$game->state;
.....
If I preload all this data it will be accessible from the pcGame.pm
However this make maintenance a nightmare.

The second (crappy) solution is to clone the resultset as I add it the
object
$game->{data} = clone($game_rs);
instead of
$game->{data} = $game_rs;
Clone coming from http://search.cpan.org/~rdf/Clone-0.22/Clone.pm

I would rather not do this because Clone has other issues that I would
need to deal with.

Anyone see this issue before?  Or have any suggestions.

Thanks,

Jason Wieland


_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[EMAIL PROTECTED]/

Reply via email to