Orm

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

モデルの作成

モデルは少しの時間で作る事ができます、規則では Model_ プレフィックスをクラス名につけます。 (ファイル名が、article.phpなら、 Model_Article とします。) そして、 app/classes/model/ に従って設置をしますが、あなたが選択した任意の名前を 自由に使用することができます。

class Model_Article extends Orm\Model {}

この方式はデータベースからモデルのプロパティを取得する必要があるため、 mysql ドライバと mysqli ドライバでのみ動作します。しかし、カラムの名前を取得するために常に 1 つのモデル毎に 余分なクエリが 1 つ実行されるため、大変非効率であり、この方式を使うことは推奨されません

class Model_Article extends Orm\Model
{
	protected static $_properties = array('id', 'title', 'contents', 'publish');
}

設定

あなたはモデルを設定するために静的なプロパティを追加することができます。
先ほど示したように、 $_properties を設定することは必須ではありませんが、設定を行う事を推奨します。 これらのプロパティは public もしくは protected で宣言します。 private で宣言すべきではありません。
すべての設定プロパティーは、カラム名との衝突を避けるために先頭に "_" ( 1 つのアンダースコア) がつけられていることに注意して下さい。

protected static $_table_name

このプロパティが設定されていないとき、クラス名から Model_ プリフィクスを削除し、英単語が複数形にされたものがテーブル名として期待されます。 "Model_Article" クラスはテーブル名として "articles" を期待します。 もしこの規約に従わない場合は、 $_table_name プロパティを設定することでテーブル名を変更することができます。

class Model_Article extends Orm\Model
{
	protected static $_table_name = 'myarticles';
}

protected static $_primary_key

デフォルトでは array('id') がセットされています。別の列名または複数の主キーを使用する場合は、 このプロパティを設定する必要があります。

class Model_Article extends Orm\Model
{
	protected static $_primary_key = array('aid');
}

主キーは、一意で不変な本当の主キーでなければなりません。 PK の値は変えられないため、 他の目的(1 対 1 の外部キーなど)に使ってはいけません。 ORM はこのチェックを行わないため、一見してうまくいっていても後で問題になります。
PK は auto_increment にすることが望ましいですが、絶対ではありません。 最初にデータを登録する時だけ指定出来ますが、一度セットしたら不変となります。

protected static $_properties

すでに、モデルのプロパティを追加するシンプルな例は提示しました。 カラムに対して、型、ラベル、バリデーションを設定することも可能です。

class Model_Article extends Orm\Model
{
	protected static $_properties = array(
		'id', // PK ではバリデーション、型、オブザーバは無視されます
		'name' => array(
			'data_type' => 'varchar',
			'label' => 'Article Name',
			'validation' => array('required', 'min_length' => array(3), 'max_length' => array(20)),
			'form' => array('type' => 'text'),
			'default' => 'New article',
		),
		'gender' => array(
			'data_type' => 'varchar',
			'label' => 'Gender',
			'form' => array('type' => 'select', 'options' => array('m' => 'Male', 'f' => 'Female')),
			'validation' => array('required'),
		),
		'created_at' => array(
			'data_type' => 'int',
			'label' => 'Created At',
			'form' => array(
				'type' => false, // このフィールドは、 form が表示される際に、レンダリングされません。
			),
		),
		'updated_at' => array('data_type' => 'int', 'label' => 'Updated At')
	);
}

この例に示すように、フォームの属性を配列の形で渡すことができます。

Validation rules can be passed as either just the rule: array('required') or as the rule with an array of params: array('min_length' => array(3)) both are shown in the example above. A full explanation of the Validation class and its rules can be found under Core. You need to set Observer_Validation to run validations.

protected static $_conditions

既定ではこのプロパティはセットされておらず、 Model::condition()array() を返します。 もし、それぞれのクエリが実行される時に何かの条件を指定したければ、モデル上で設定することが可能です。 現時点では 'order_by' 条件と 'where' 条件が指定可能です。

class Model_Article extends Orm\Model
{
	protected static $_conditions = array(
		'order_by' => array('id' => 'desc'),
		'where' => array(
			array('publish_date', '>', 1370721177),
			array('published', '=', 1),
		),
	);
}

order_by 条件は他のorder_by節が定義されていないときのみ有効です。 where 条件は他のwhere節が定義されている場合、 and で追加されます。

protected static $_has_one, $_belongs_to, $_has_many, $_many_many

お互いのモデルを関連することは、 Relating Models で説明しています。

protected static $_connection

既定ではこのプロパティはセットされておらず、 Model::connection()null を返します。 もし、 app/config/db.php で設定された他のデータベースを設定することも可能です。

protected static $_write_connection

もし、データベースが master/slave 環境で構成されている場合、 master に対する write に使用する connection を指定することができます。 もしこのプロパティが設定されている場合、 $_connection は slave に対する read に利用されます。

既定ではこのプロパティはセットされておらず、 Model::connection(true) は設定された $_connection 、 もしくはnullを返します。 app/config/db.php で設定された他のデータベースを設定することも可能です。

// シングル構成のデータベースを利用する場合の設定
class Model_Article extends Orm\Model
{
	// 'articles_db' は db.php で設定されている必要がある
	protected static $_connection = 'articles_db';
}

// master/slave 構成のデータベースを利用する場合の設定
class Model_Article extends Orm\Model
{
	// 'articles_master_db' と 'articles_slave_db' は db.php で設定されている必要がある
	protected static $_write_connection = 'articles_master_db';
	protected static $_connection = 'articles_slave_db';
}

リレーションは同じコネクション上でしか利用できません。 このため、もし、モデル内でコネクションを設定する場合は、リレーションを設定するモデルが read 、 write の両方で同じコネクションを使うように十分注意してください。

protected static $_to_array_exclude

API ドリブンなアプリケーションを作成する場合、しばしば API に公開するカラムを制限したくなる場合があります。 たとえば、 user を管理するレコードを API から参照する場合、 パスワードやログインハッシュ、salt を公開する必要はありません。

モデルの定義において、 to_array_exclude にカラム名を追加することで、 to_array() の結果から除外することができます。

class Model_User extends Orm\Model
{
	protected static $_to_array_exclude = array(
		'password', 'login_hash', 'salt'	// 出力からこれらのカラムを除外します
	);
}

既定では to_array() メソッドは現在のモデルのカラムとリレーションにより読み出されたデータの両方を出力します。 必要に応じてカスタムプロパティも出力することが可能です。 配列による除外は、カラム、カスタムプロパティ、リレーションのすべてを除外することができます。

protected static $_observers

オブザーバーの追加については Observers で説明されています。