概要
HyperActive Recordは、CodeIgniter 2.0フレームワーク以上のDBクラスのアドオンであり、これにより、関係やデータの追加説明なしで、外部キーによって記録オブジェクトに関連付けられたフィールド値を取得できます。 このようなアンダーORM
githubで
ライブラリーページ
なぜこれが必要なのですか?
たとえば、プロジェクトテーブルの構造を次に示します。 ここで、プロジェクト、クライアント、およびマネージャーのタイプとの接続があることがわかります。
通常、ActiveRecordを使用してデータを受信する場合、次のようになります。
モデル内:
$this->db->select(); $this->db->from($this->table); $query = $this->db->get(); return $query->result();
その結果:
array(1) { [0]=> object(stdClass)#19 (9) { ["id"]=> string(1) "2" ["name"]=> string(21) " " ["date_start"]=> string(19) "2012-07-19 00:00:00" ["date_end"]=> string(19) "2012-07-31 00:00:00" ["description"]=> string(16) "" ["project_types_id"]=> string(1) "1" ["clients_id"]=> string(1) "1" ["sum"]=> string(5) "12333" ["manager_id"]=> string(1) "1" } }
クライアントの名前、プロジェクトタイプ、マネージャー情報を取得する代わりに、IDを取得します。 したがって、値を取得するには、手動でリクエストを追加するか、ARに結合を書き込む必要があります。 それと、別のものは啓発と幸福を与えません あなたはそれを絶えずそして定期的にしなければなりません。
はい、もちろん、完成したORMをCodeIgniterにねじ込んで(または別のフレームワークを使用している場合はパッケージに入れて)いじり、モデルクラスと接続の説明を記述できます...停止します。 もう一度書いてください。
なぜなら 私は非常に怠け者であり、同じことを常に行うのは好きではありません。プロジェクトの1つで、単純なgetを作成できると同時に、介入なしでレコードに関連するオブジェクトをプルできるライブラリを見つけることにしました。 見つけられなかったので、HyperActive Recordになりました。
Simon Emmsのおかげで、標準DBドライバーを拡張するアイデアと方法について
ライブラリ機能:
- 外部キーを使用して、すべてのフィールドの値を持つレコード関連オブジェクトを受信します。
- 1対多、多対1、多対多の関係のサポート
- リクエストに示されたフィールドに従ってのみ、関連するオブジェクトを受信します。追加のデータはありません
- ネストレベルの数に制限はありません(プロジェクトに作成者がいて、作成者にポジションがある場合、結果のオブジェクトにはプロジェクトと作成者の両方が投稿の値で添付されます)
制限事項:
- これまでのところ、MySQLのみ
- MySQLのみInnoDBでは、MyISAMは外部キーをサポートしません
- 「アダルト」ORMとは異なり、受信したオブジェクトなどでモデルのメソッドを呼び出すことはできません。これらは単なるデータです
藤堂
- 再帰のネストレベルの制限
- 他のCodeIgniterデータベースドライバーのサポート
- コード栽培
ドキュメント
設置
ライブラリをダウンロードして解凍し、アプリケーションのコアフォルダーにファイルを配置します(アーカイブでは、パスはapplication / coreになりますが、アプリケーションの名前は異なる場合があります)
すべて、これ以上使用するジェスチャは必要ありません。
使用する
通常のActive Recordコンストラクトの作成
$this->db->select(); $this->db->from($this->table); $query = $this->db->get(); return $query->result(true,$this->table); // return $query->row(true,$this->table);
後方互換性のために、パラメーターがない場合、 row()またはresult()はMySQLドライバーの親関数を呼び出します。 $ this-> tableは、レコードを取得するベーステーブルです
関連レコードを含む結果オブジェクトのフィールドの名前は、関連レコードを含むテーブルの名前から取得されます
クエリの結果(上記と同じテーブルの例を使用):
array(1) { [0]=> object(stdClass)#19 (14) { ["id"]=> string(1) "2" ["name"]=> string(21) " " ["date_start"]=> string(19) "2012-07-19 00:00:00" ["date_end"]=> string(19) "2012-07-31 00:00:00" ["description"]=> string(16) "" ["project_types_id"]=> string(1) "1" ["clients_id"]=> string(1) "1" ["sum"]=> string(5) "12333" ["manager_id"]=> string(1) "1" ["project_types"]=> object(stdClass)#23 (2) { ["id"]=> string(1) "1" ["name"]=> string(24) "-" } ["clients"]=> object(stdClass)#22 (2) { ["id"]=> string(1) "1" ["name"]=> string(12) " " } ["users"]=> object(stdClass)#20 (7) { ["id"]=> string(1) "1" ["login"]=> string(11) "megalogin" ["password"]=> string(32) "202cb962ac59075b964b07152d234b70" ["name"]=> string(12) "John" ["surname"]=> string(18) "Doe" ["roles_id"]=> string(1) "2" ["roles"]=> object(stdClass)#28 (2) { ["id"]=> string(1) "2" ["name"]=> string(16) "" } } ["project_files"]=> array(0) { } ["projects_milestones"]=> array(1) { [0]=> object(stdClass)#25 (7) { ["id"]=> string(1) "1" ["name"]=> string(10) "" ["description"]=> string(0) "" ["count_files_needed"]=> string(1) "0" ["checklist_has_urls"]=> string(1) "0" ["final_file_needed"]=> string(1) "0" ["projects_id"]=> string(1) "2" } } } }
便宜上、再びコードの量を減らすために、関数get_list()およびget()を使用して基本モデルを作成し、継承モデルではコンストラクタで$ this->テーブルを設定することをお勧めし ます