http://madroom-project.blogspot.com/2011/11/windows-xamppfuelphp.html
この時、postsテーブルにはcreated_atというカラムと
updated_atというカラムが作成されました。
これらのカラムは、oil generate scaffoldで作成されたmigrationファイルに、
デフォルトで含まれています。
カラム名から察するに、insert時やupdate時に、自動でタイムスタンプがsetされるのだろう。
と思っていましたが、どうも、0という値が入り、タイムスタンプが入りません。
原因は、生成されたModelが、Model_Crudを継承していて、
Orm\Modelを継承していないからでした。
Orm\Modelを継承したModelを作成するには、
"--orm"を付与してoil generate scaffoldを実行する必要があります。
尚、"generate"は"g"と略せます。具体的には、以下のようなコマンドになります。
$ php oil g scaffold post title:string summary:varchar[250] body:text --orm
これで、Orm\Modelを継承したModelが作成されました。
namespace Model; class Post extends \Orm\Model { protected static $_observers = array( 'Orm\Observer_CreatedAt' => array('before_insert'), 'Orm\Observer_UpdatedAt' => array('before_save'), ); }
また、app/config.phpのalways_loadのpackagesで、ormを有効にする必要があります。
'always_load' => array( /** * These packages are loaded on Fuel's startup. You can specify them in * the following manner: * * array('auth'); // This will assume the packages are in PKGPATH * * // Use this format to specify the path to the package explicitly * array( * array('auth' => PKGPATH.'auth/') * ); */ 'packages' => array( 'orm', ),
これでOKと思いきや、postsコントローラにアクセスすると、以下のエラーが発生。
--
Fuel\Core\Database_Exception [ 1054 ]: Unknown column 't0.' in 'where clause' [ SELECT `t0`.`id` AS `t0_c0`, `t0`.`title` AS `t0_c1`, `t0`.`summary` AS `t0_c2`, `t0`.`body` AS `t0_c3`, `t0`.`created_at` AS `t0_c4`, `t0`.`updated_at` AS `t0_c5` FROM `posts` AS `t0` WHERE `t0`.`id` = '0' OR ((`t0`.`` IS null)) LIMIT 1 ]
--
このエラーは、自動生成されたコントローラの
$data['posts'] = Post::find_all();を
$data['posts'] = Post::find('all');にすることで解決出来ました。
これでinsertやupdateをしてやると、無事、created_atやupdated_atに
UNIXタイムスタンプが入るようになりました。
参考:
http://docs.fuelphp.com/packages/oil/generate.html
No comments:
Post a Comment