Re: cascading update
[prev]
[thread]
[next]
[Date index for 2005/04/13]
Hmmm...that looks very similar to $cat->pid->personid->update, which I've
already tried, but I'll give it a shot.
Oh, I get it. If I just leave it at $cat->pid I'm updating the thing pid
references. That works. Thanks.
Jennifer
Quoting yoorobot@xxxxx.xxx:
> have you tried $cat->pid->update?
>
>
> On Apr 8, 2005, at 1:08 PM, jldommer@xxxx.xxxxx.xxx wrote:
>
> > Hi all,
> >
> > I've been working with cdbi for a couple of months now, but Ive been
> > using a lot of fairly inelegant code to mimic what my boss refers to
> > as 'cascading submit' with has_many. What he means by 'cascading
> > sumbit' is that if I have a parent object with multiple children and I
> > change some of the fields in the child objects, I'd like to be able to
> > send these changes to the db by calling update on the parent so that I
> > don't have to call update on each of the individual children. It has
> > to work in the opposite direction as well (i.e. if I have a child
> > object and change a field in the parent object, I'd like to update the
> > child instead of explicitly generating the parent to call update on,
> > which is what I do now). Here is an example of what I'd like to have
> > work:
> >
> > I have a person (parent) object and a cat (child) object related like
> > this:
> >
> > TestOracle::Cat->has_a ( 'pid' => 'TestDBIsA::Person' );
> > TestOracle::Person->has_many( 'cats' , 'TestDBIsA::Cat' => 'pid' );
> >
> > If I have retrieved my person from the database, I would like to be
> > able to update the cat's name like this:
> > my @cats = $person->cats;
> > my $cat = $cats[0];
> > $cat->name('Mr. Whiskers');
> >
> > $person->update; # and I would like this to save the changes to cat.
> >
> > the call to update on $person does not save the change to the cat.
> > This isn't really a big issue going in this direction, since I can
> > loop over the array and call update every time (my current mimic), but
> > on larger arrays I'd like to just update once. It becomes an bigger
> > issue when I try this:
> >
> > my $cat = TestOracle::Cat->retrieve(1);
> > $cat->pid->firstname('Mike');
> > $cat->update;
> >
> > Note that firstname is a column in my person class, not in cat. pid
> > is the foreign key in cat to person. The above code doesn't work, and
> > instead I have to explicitly create a person object to save the
> > changes that were made, which defeats the purpose of making the
> > changes to the parent via the child. I've been searching the list
> > archive, but I haven't found anything that seems to deal with this.
> > Is there any way that I can do cascading sumbit other than with the
> > workarounds that I'm currently implementing?
> >
> > Jennifer Dommer
> >
>