Orm

ORMはオブジェクト 関係マッピングの略です。 これは、2つのことを行います: オブジェクトにデータベースのテーブルの行をマップし、 それはあなたがそれらのオブジェクト間の関係を確立することができます。
それは Active Record パターンに従いますが、 他のシステムに影響も受けます。

オブザーバ:自分の作成

完全なclassname(名前空間を含めて)をモデルのオブザーバ・プロパティに加えることにで、オブザーバとしてあなたはどんなクラスでも 加えることができます。オブザーバとして使われることができるクラスを作成するには2つの方法があります:

Extend the Orm\Observer class

Orm\Observerを展開する新しいクラスを作成して、あなたのオブザーバが行動することを望むイベントのための 方法を作成してください。 下記の例は、それがafter_insertに作用することを望んでいます。 メソッドは、それを実行する対象モデルのインスタンスが渡されます。

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()メソッドを持っているとして、しかし、あなたがいる限りオブザーバーとして任意のクラスを使用することができます。それはイベントで呼び出され、 イベント名とモデルのインスタンスを渡すことができます。

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_insert and before_update are triggered only if the object has been changed. If you need to trigger an event even if the object has not been changed (ex.: to handle $_FILES datas), you should use before_save.