FuelPHPのModelはModelの内容が更新されたらupdated_atに自動でシステム日付を入れるという機能があります。
ModelにObserverを設定することでこれを実現しているのですが、一時的にObserverを無効にしてupdated_atの自動更新をやめたい場合があります。
その場合、unregister_observer
メソッドを使ってObserverを無効にすることができます。
例えばモデルExampleが以下のように定義されていたとします。
model/example.php
<?php
class Model_Example extends \Orm\Model_Soft
{
protected static $_properties = array(
'id',
'name',
'count',
'created_at',
'updated_at',
'deleted_at',
);
protected static $_observers = array(
'Orm\Observer_CreatedAt' => array(
'events' => array('before_insert'),
'mysql_timestamp' => true,
),
'Orm\Observer_UpdatedAt' => array(
'events' => array('before_update'),
'mysql_timestamp' => true,
),
);
protected static $_soft_delete = array(
'deleted_field' => 'deleted_at',
'mysql_timestamp' => true
);
protected static $_table_name = 'examples';
}
この場合モデルのsaveメソッドで更新すると、モデルのプロパティが変更されていた場合
Observerが自動でupdated_atに値を設定します。
これを何らかの事情でupdated_atを更新したくない場合、以下のように
$model = Model_Example::find($id);
$model->unregister_observer('Orm\Observer_UpdatedAt');`
$model->count += 1;
$model->save();
unregister_observer
メソッドの引数に一時的に無効にしたいObserver名を指定して実行すると
Observerが無効になり、この場合save
メソッドで更新してもupdated_atが更新されなくなります。