FuelPHPのModel_Crudは、dbのinsert,update時に自動的に追加日時・更新日時を更新してくれるはずだが、うまく更新されない。created_at、updated_atのカラム名はあっているのだが、created_at,updated_atには0000-00-00 00:00:00が入っている。更新しても日時が入らない。

原因はちゃんとModel_Crudを継承したクラスで、_mysql_timestamp=trueにしていないこと。ちゃんとヘルプFuelPHP Model_Crud Classにも書いてある。

class Tabletest extends \Model_Crud  {

	protected static $_table_name = 'tbltest';
	protected static $_created_at = 'created_at'; // Field name for a 'created at' field.
	protected static $_updated_at = 'updated_at'; // Field name for a 'updated at' field.
	protected static $_mysql_timestamp = false; // Set to true to use a MySQL timestamp instead of a UNIX timestamp

}
protected static $_mysql_timestamp = false; // Set to true to use a MySQL timestamp instead of a UNIX timestamp

の場合、Model_Crudは次のようなSQLを発行する。

sql=[INSERT INTO `tbltest` (`name`, `updated_at`, `created_at`) 
VALUES ('name-test', 1392031938, 1392031938)]

updated_at、created_atは1392031938のような数値で、UNIX timestampだ。

protected static $_mysql_timestamp = true; // Set to true to use a MySQL timestamp instead of a UNIX timestamp

の場合、updated_at、created_atは'2014-02-10 20:31:13'のような数値になり、ちゃんとDBに入った。

sql=[INSERT INTO `tbltest` (`name`, `updated_at`, `created_at`) 
VALUES ('name-test', '2014-02-10 20:31:13', '2014-02-10 20:31:13')]

実は以前もこれにハマってしまったことがあり、2回目なのでちゃんとメモっておこう。