Orm

Orm 是 物件關聯對映(Object Relational Mapper) 的简寫,它做兩件事:
對應你資料庫裡的資料列到物件, 并能让你在这些物件之間建立關係。
它緊隨 活动記錄模式( Active Record Pattern),但也受到其他系统的影響。

觀察者:建立你自己的

你可以添加任何类別做为一个觀察者,藉由添加完整的类別名稱(包含命名空間)到你的模型的 Observers 特性。 有兩種方式建立的类別可以用來做为觀察者:

擴充 Orm\Observer 类別

建立一个擴充 Orm\Observer 的新类別,并为你想要你的觀察者行动的事件上建立方法。 在下面的範例中,你想要它在 after_insert上行动, 該方法动作時将被傳遞 Model 實例。

class Observer_Something extends Orm\Observer
{

	public function after_insert(Orm\Model $model)
	{
		\Log::info('Succesfully created new object of class '.get_class($model));
	}
}

Orm\Observer 擴充的类型預設是獨體的,如此你不能使用一个 instance() 方法或一个 $_instance 特性,否則無法正常運作, 因为此方法可能是靜態或非靜態。

帶有一个 orm_notify() 方法

當你擴充 Orm\Observer 类別它繼承一个 orm_notify() 方法, 該方法将確認是否有符合事件的方法,并在可能時呼叫它。 但你可以使用任何类別做为一个觀察者只要它有一个 orm_notify() 方法, 該方法将於事件被呼叫且被傳遞事件名稱和一个 Model 實例。

class Some_Other_Class
{

	// 在 orm_notify 方法之前或之後可能有許多方法及特性

	public static function orm_notify(Orm\Model $model, $event)
	{
		\Log::info('I was notified of the event '.$event.' on a Model of class '.get_class($model));
	}
}

事件名稱

  • after_create,一旦物件被建立時,由 __construct() 方法呼叫
  • after_load,一旦物件從資料庫被載入時,由 __construct() 方法呼叫
  • before_save,在任何事完成之前,由 save() 方法呼叫
  • after_save,在完成後由 save() 方法呼叫
  • before_insert,當一个物件第一次被儲存到資料庫時被呼叫
  • after_insert,當一个物件第一次被儲存到資料庫後被呼叫
  • before_update,當一个物件被儲存到資料庫時被呼叫(第一次除外)
  • after_update,當一个物件被儲存到資料庫後被呼叫(第一次除外)
  • before_delete,當你從資料庫刪除一个物件時被呼叫
  • after_delete,當你從資料庫刪除一个物件後被呼叫
  • after_clone,在一个物件成功被複製之後被呼叫

before_insertbefore_update 在該物件被變更時觸发。如果你需要觸发一个事件即使該物件沒有被變更(例如:要处理 $_FILES 資料),你應該使用 before_save