Orm

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

はじめに

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

インストール

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 を強制することができます。