Orm

Orm は Object Relational Mapper の頭文字です。 データベースの行をオブジェクトにマッピングする、これらのオブジェクト間の関係を確立させるという 2 つの機能があります。 Active Record パターンをよく踏襲していますが、他のシステムの影響も受けています。

はじめに

他の多くの ActiveRecord の実装とは異なり、小型で高速、さらに死ぬほど簡単に使えます。 それは簡単に、あなたのデータベースの項目を作成したり更新したり削除したりすることができるでしょう。 あなたのために、Orm がすべてのハードワークを行います。

インストール

Orm パッケージは Fuel の配布物に含まれています。 設定で有効にするだけで利用できます。

'always_load' => array(
	'packages' => array(
		'orm',
	),
),

トラブルシューティング

一般的な問題とよくある質問。

リレーション/外部キーが保存されていません。 (1)

リレーションシップの間違った型を使用している場合に、最も頻繁に起こります。 特に Has-one と Belongs-to に混ざってしまいがちです。 ドキュメントの例を再読し、 あなたが正しくリレーションタイプを使用していることと、すべてが正しく設定されているかどうかを確認してください。

オブジェクトを関連付けることができません (2)

あなたのモデルが Orm\Model を継承し、 Model_Crud を継承していない事を確認してください。

package/module にある私の関連するモデルが見つからないという例外を受け取りました

パッケージまたはモジュールがFuelによってロードされていることを確認してください。 そうでなければオートローダーは、クラスを見つけることができません。
そして、関連するモデルを "model_to" に設定するときは 同じ名前空間に属している場合であっても、名前空間を含めた完全なクラス名を設定してください。 文字列内のクラス名は、常にグローバルコンテキストから取得されます。現在の名前空間コンテキストは関係ありません。

Orm\FrozenObject という例外を受け取りました

オブジェクトは、データベースの保存中に変更することはできません。これは連携によってループする保存や、 すでに保存してあるオブジェクトをもう一度保存することを防ぐためです。 これは通常の使用時に起きるべきではありませんし、たいていは間違ったリレーションの設定によって起きます。
また安定リリースを使っていない場合に、バグにより引き起こされることもあります。

Limit 及び Offset を定義したが、結果が正しくありません

ORM は常にクエリの結果に一貫性があることを確認します。関連するモデルが含まれているクエリを実行すると、 すべての関連する結果がフェッチされたかどうかを確認するためにサブクエリが生成されます。 これは、 limit で定義した以上のレコードがフェッチされることを意味しています。 一旦不完全な結果セットを操作し始めると、関連するモデルにとてもわるい影響が起こるためです。

もしあなたがその結果を絶対に操作しないことが確信できる場合(たとえば pagination のみに利用する場合) 代わりに rows_limit()rows_offset() を利用する事で クエリに対して limit, offset を強制することができます。