On Sep 13, 2007, at 3:01 PM, Richard Jones wrote:
Jonathan Rockway wrote:
Richard Jones wrote:
There is obviously something amiss because if I omit my own
date_to_mysql() method then system tries to retrieve dates in
dd/mm/yyyy format.
I think you're misunderstanding InflateColumn::DateTime.
Well you're not wrong there.
Here's some
example code:
$some_rs->create({ creation_time => DateTime->now });
But I still don't see how to translate that to my example. Do I
need to setup __PACKAGE__->inflate_columns() in Schema::Foo as in
the docs? I assumed so and did so, using DateTime::Format::MySQL-
>parse_datetime() for inflation and D::F::M::format_datetime() for
deflation.
No, all you have to do is:
__PACKAGE__->load_components( qw( InflateColumn::DateTime Core ) );
and then...
__PACKAGE__->add_columns(
dob => { data_type => 'date' },
);
InflateColumn::DateTime overloads register_column, so when you add a
column with a data_type of 'datetime' or that starts with
'timestamp', it sets up the inflator/deflator for you (check the
overloaded register_column() method in InflateColumn::DateTime to see
exactly what it is doing.)
How then do I do something like $schema->update( \%form_data ) when
the user submits a date formatted as '20/12/2000'. How would you do
it with the US equivalent '12/20/2000'?
As I understand it, you have a date_to_mysql() method that takes a
variety of different date formats and turns them into mysql formatted
dates, what you should probably do is turn that into a
date_to_datetime() method, that returns a DateTime object instead of
a mysql-formatted date. In my case I just use HTML::FormFu with an
inflator that turns dates from the form into DateTime objects
automatically. If you really want to update your database with
'12/20/2000', one possible way to do that would be...
use DateTime::Format::Strptime qw( strptime );
$some_dbic_object->updated_time( strptime( '%m/%d/%y', '12/20/2000' ) );
$some_dbic_object->update();
Actually I think I'm partly there as the dumped sql now shows a
definite conversion to MySQL format, at least for some dates
(others are generating Template::Context errors).
Perhaps you could just confirm I'm on the right track with just
defining the inflate_columns inflate and deflate subs, and letting
the db do the rest? Thanks.
It's the right track if you are not using InflateColumn::DateTime, if
you are using it, then you don't need to define the inflator/deflator
yourself, you just need to use the plugin (and make sure it appears
in the load_components list *before* Core, as it overloads Core
methods) and then define columns with appropriate data_types.
--
Jason Kohles
[EMAIL PROTECTED]
http://www.jasonkohles.com/
"A witty saying proves nothing." -- Voltaire
_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[EMAIL PROTECTED]