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ではありません。
すべての設定プロパティーにプレフィックスが着いている事に注意し、
列名との衝突を防止するために強調している。
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にすべき(望ましい)です。PKを
自分で初回のみ指定することができます。一度セットすると、それがセットされます。
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')
);
}
この例に示すように、フォームの属性は配列の形で渡すことができます。
array('required') array('min_length' => array(3)) のどちらかのカタチを検証ルールとして 渡す事ができます。 Validationクラスとそのルールの完全な説明は、 Coreの中で見つける事ができます。
。protected static $_has_one, $_belongs_to, $_has_many, $_many_many, $_many_through
お互いのモデルを関連することは、 Relating Modelsで説明しています。
protected static $_connection
デフォルトでは、このプロパティが存在しません。そして Model::connection() は nullを返します。 しかし、 app/config/db.phpで設定された,任意の他のデータベース名に設定することができます。関係が接続の向こう側に動作しないことに 注意してください。
class Model_Article extends Orm\Model
{
protected static $_connection = 'articles_database';
}
protected static $_observers
追加オブザーバーについては Observersで説明されています。