[Dbix-class] question about InflateColumn::DateTime

Jess Robinson castaway at desert-island.demon.co.uk
Tue Nov 7 18:31:16 GMT 2006



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





More information about the Dbix-class mailing list