Christopher H. Laco wrote: > Jess Robinson wrote: >> >> On Tue, 7 Nov 2006, John Napiorkowski wrote: >> >>> Hi, >>> >>> I've been using InflateColumn::DateTime for a few >>> weeks now for my reports and it's worked very well. >>> However I have run into the following trouble; if I >>> try to change the datetime object value using one of >>> the setter methods it seems like DBIx doesn't notice. >>> >>> Here's an example: Assume I have a column in a >>> resultset called 'date_of_birth' >>> >>> my $birth_month = $c->resultrow->date_of_birth->month; >>> >>> Okay, $birth_month is properly set and I can see that >>> in the output. But if I try: >>> >>> $c->resultrow->date_of_birth->set_month([new month]); >>> >>> and then: >>> >>> $c->resultrow->insert_or_update >>> >>> The change doesn't get applied. If I change other >>> columns in this row it works fine. However when I >>> inspect the $resultrow->is_changed and the >>> $resultrow->has_dirty_columns I don't see the >>> 'date_of_birth' column marked as altered. I will see >>> other columns that I changed. >>> >>> I'd like to figure out how to many this work, since I >>> expect it could also be the case for other inflated >>> objects that I might have, like a text field that gets >>> inflated to an HTML object, for example. >>> >>> Has anyone else run into this and if so what was the >>> solution you found? >>> >> Hi John, >> >> Whats happening is that >> >> $c->resultrow->date_of_birth->set_month([new month]) >> >> is creating an unnamed DateTime object, setting the new month on it, >> then throwing it away. I'm afraid it's not magic enough to grasp what >> you wanted to do with that syntax.. You'll need to do something like: >> >> my $dob = $c->resultrow->date_of_birth; >> $dob->set_month([new month]); >> $c->resultrow->date_of_birth($dob); >> $c->resultrow->update; >> >> >> Jess > > So, if I read that correctly, then every call to ->date_of_birth returns > a newly inflated object, rather than just a reference to the same > inflate object? > > In other words: > > print ref $c->resultrow->date_of_birth; > print ref $c->resultrow->date_of_birth; > print ref $c->resultrow->date_of_birth; > > would produce 3 completely new/seperate inflated objects? > > Maybe this is something that should go on a TODO list. > I would suspect there's no good reason to inflate something more than > once per row. This would mean that people could start using those fields > like the original poster expected them too and not have to worry bout > reassigned the objects back into the column for a deflate cycle. > > Of course, I could be completely missing the point. :-) > > > -=Chris
Or is that just specific behaviour to Inflate::DateTime/DateTime?
signature.asc
Description: OpenPGP digital signature
_______________________________________________ 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]/
