1

オブジェクトを定義する 3 つのクラスがUsersありMembersますProjects

  • Userクラスはid、 、 、email_addressなど の詳細を定義しnameます。
  • Memberクラスは、iduser_idproject_idなどの詳細を定義しdatetime_acceptedます。
  • Projectクラスは and などの詳細を定義しますがid、これtitleは重要ではありません。

システムにはUsersとがありProjectsます。AMemberは にUser取り組んでいProjectます。つまり、Memberクラスは 2 つのオブジェクト間のリンクを定義します。

私の質問はこれです:

特定のプロジェクトに属するメンバーのリストを取得したいのですが、結果セットで両方のクラス ( Memberand User- User:nameMember:など) から変数を収集したいと考えています。datetime_accepted

両方のクラスのすべての変数を持つ新しいクラスを定義する必要がありますか?それとも、これをきちんとオブジェクト指向の方法で処理するために使用できる、より効率的な構造が他にありますか?

4

3 に答える 3

1

次の方法で、StdObject を配列に簡単にキャストできます。

$result = array_merge((array)$user, (array)$member);

次に、必要な変数の配列が得られます。これを Project クラスの新しい関数に追加するか、Member を User クラスの子として使用することを検討してください。

于 2012-04-11T17:06:20.050 に答える
0

この問題を解決するために私がやったことは、内にProjectUserオブジェクトを作成することでしたMember。オブジェクトは、メンバーが作成されたときに作成されました。大丈夫です。

于 2012-04-12T19:22:08.787 に答える
0

アクティブ レコード モデルを使用する場合、通常、関連するオブジェクトを取得するためのメソッドが 1 つのオブジェクトに含まれます。SQL を 1 つのクエリに単純化したい場合は、アクティブ レコード モデルから離れることになります。これは問題ありません。問題へのアプローチ方法が変わるだけです。

私が過去に行ったことは、次の 2 つのアプローチのいずれかです。

  1. たとえば、「仮想プロパティ」を AR に追加するには、Login (User) クラスにプロパティ「Roles」があり、標準の読み込みクエリで JOIN によって入力されます。

  2. より複雑な状況向けに拡張した Report オブジェクトを作成するには。Report サブクラスには、複数テーブル クエリであるプロパティと、WHERE 句のパラメータを表すその他のプロパティがあります。このクラスは、配列の配列を生成します。

于 2012-04-11T18:33:51.343 に答える