私は、これら2つのデータベースのテーブルがあります。カスタムオブジェクト
場所を
ID
名
ユーザー
ID
が
LAST_NAMEをLOCATION_ID
first_name
私もユーザーと場所クラスを持って、彼らは両方のモデルを拡張し、いくつかのカスタム・メソッドが含まれています。例えば、ユーザークラスには、get_full_name()メソッドがあります。
私はcustom_result_objectはビルトインが、CodeIgniterの中に文書化されていない機能です
$this->db->select('users.id, locations.name as location_name, users.last_name, users.first_name');
$this->db->from('users');
$this->db->join('locations', 'users.location_id = location.id');
$query = $this->db->get();
$users= $query->custom_result_object('User'); //now $users is an array of User object
、データをロードするために、次のコードを使用しています。クラス名の文字列を受け取り、それを使ってそのクラスのオブジェクトを作成します。上記のコードで
、私は
foreach($users as $user)
{
echo $user->id;
echo $user->get_full_name();
echo $user->location_name;
}
しかし、あなたが見ることができるように、このようにデータにアクセスすることができ、LOCATION_NAMEは私がしたいことはユーザーで、今ユーザーオブジェクトのフィールドであるオブジェクトは、私はDataMapperのORMまたは任意のOTHを使用したくない
foreach($users as $user)
{
echo $user->id;
echo $user->get_full_name();
echo $user->location->name; // Location is an object
}
、私はこのようにそれを使用することができます場所オブジェクトのフィールドを持っていますまた、N + 1のクエリパフォーマンスの問題を回避したいと考えています。
最小限のコードでこれを行うにはどうすればよいですか?
注:実際のケースでは、デモ用にこのサンプルを作成しました。カスタムメソッドが定義されているテーブルとクラスがかなりあります。
皆さん、ありがとうございます。
これもライブラリに入りますか? – Zalaboza