質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

2回答

4228閲覧

FuelPHPで、DBのレコードを追加する時、created_atの値をupdated_atにも入れたい

usugita_san

総合スコア221

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

1クリップ

投稿2015/06/30 08:04

編集2015/07/01 04:49

以下のサイトを参考にご質問します。

http://to-developer.com/blog/?p=132

以下のソースをモデルに書けば、レコードを追加した時にcreated_atに日付が入るはずです。

lang

1protected static $_observers = array( 2 'Orm\Observer_CreatedAt' => array( 3 'events' => array( 4 'before_insert'), 5 'mysql_timestamp' => true, 6 'property' => 'created_at', 7 ), 8);

では、created_atに入れた値を、updated_atへも入れたい場合にはどうするのでしょうか?
property=>created_atの箇所にupdated_atも一緒に入れればいいのかと思ったのですが、残念ながら配列で指定は出来ませんでした。

どなたか方法をご存じないでしょうか。

追記1:
言葉が足りませんでした。質問したいのは、insertした時にupdated_atにcreated_atと同じ値を入れたいのです。
updateした時ではありません。
以下のようにすれば、update時にupdated_atに値は入ります。しかしinsert時には入らないのです。

lang

1 protected static $_observers = array( 2 'Orm\Observer_CreatedAt' => array( 3 'events' => array( 4 'before_insert'), 5 'mysql_timestamp' => true, 6 'property' => 'created_at', 7 ), 8 'Orm\Observer_UpdatedAt' => array( 9 'events' => array( 10 'before_update'), 11 'mysql_timestamp' => true, 12 'property' => 'updated_at', 13 ), 14 );

追記2:
Observer_UpdatedAtにbefore_saveイベントを設定すれば、insert時に入力出来るかと思ったのですが、無理でした。
以下のソースで動作しませんでした。もう少し調べて、無理そうなら諦めようと思います。

lang

1 /** 2 * @var array $_observers 時間設定(自動更新) 3 */ 4 protected static $_observers = array( 5 'Orm\Observer_CreatedAt' => array( 6 'events' => array( 7 'before_insert'), 8 'mysql_timestamp' => true, 9 'property' => 'created_at', 10 ), 11 'Orm\Observer_UpdatedAt' => array( 12 'events' => array( 13 'before_save'), 14 'mysql_timestamp' => true, 15 'property' => 'updated_at', 16 ), 17 'Orm\Observer_UpdatedAt' => array( 18 'events' => array( 19 'before_update'), 20 'mysql_timestamp' => true, 21 'property' => 'updated_at', 22 ), 23 );

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Observer_UpdatedAt を使えば、Insert もしくは、Update時に
updated_atに値を設定できると思います。

http://fuelphp.jp/docs/1.8/packages/orm/observers/included.html

投稿2015/06/30 12:55

編集2015/06/30 12:56
toru81

総合スコア170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

usugita_san

2015/07/01 04:52

まだ調査中なのですが、できなかったパターンを質問に追記しました。 ありがとうございました。
usugita_san

2015/07/01 04:55

無事解決しました。 そちらの資料が大変役に立ちました。ありがとうございました。
guest

0

以下の方法で解決しました。

lang

1 /** 2 * @var array $_observers 時間設定(自動更新) 3 */ 4 protected static $_observers = array( 5 'Orm\Observer_CreatedAt' => array( 6 'events' => array( 7 'before_insert'), 8 'mysql_timestamp' => true, 9 'property' => 'created_at', 10 ), 11 'Orm\Observer_UpdatedAt' => array( 12 'events' => array( 13 'before_save'), 14 'mysql_timestamp' => true, 15 'property' => 'updated_at', 16 ), 17 );

どうも、before_saveとbefore_updateを一緒に書いているのが問題のようでした。
後から追加したものを上書きしちゃうのかな?
取り敢えず、before_updateのイベントを使う所を削除しましたら、うまくいきました。

投稿2015/07/01 04:54

usugita_san

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問