2012-04-11 7 views
1

Ich habe drei Klassen zum Definieren von Objekten: Users, Members und Projects.Klasse zum Definieren des Ergebnisses von 2 verbundenen Objekten

  • Die User Klasse definiert Details wie id, email_address und name.
  • Die Member Klasse definiert Details wie die id, user_id, project_id und datetime_accepted.
  • Die Project Klasse definiert Details wie id und title - diese ist jedoch nicht wichtig.

Das System verfügt über Users und Projects. A Member ist ein User, der an einem Project arbeitet. Mit anderen Worten, die Klasse Member definiert eine Verbindung zwischen zwei Objekten.

Meine Frage lautet:

Ich möchte eine Liste der Mitglieder zu einem bestimmten Projekt gehören zu bekommen, und ich möchte Variablen sammeln aus beiden Klassen (Member und User - wie User: name und Member : datetime_accepted) in meinem Ergebnissatz.

Muss ich eine neue Klasse definieren, die alle Variablen aus beiden Klassen enthält, oder gibt es eine andere, effizientere Struktur, mit der ich dies sauber und objektorientiert handhaben kann?

Antwort

1

Sie können easly StdObject in Array geworfen von:

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

dann werden Sie eine Reihe von Variablen, die Sie benötigen. Fügen Sie dies der neuen Funktion in der Projektklasse hinzu oder erwägen Sie, Member als Kind der User-Klasse zu verwenden.

+0

Ich denke, die Verwendung von Member und ein Kind von User könnte ein besserer Ansatz für meine Implementierung sein. Vielen Dank. – Alex

0

Wenn Sie mit Active Record Models arbeiten, haben Sie normalerweise eine Methode in einem Objekt, um verwandte Objekte zu erhalten. Wenn Sie das SQL zu einer Abfrage vereinfachen möchten, entfernen Sie sich vom Active Record Model. Das ist in Ordnung, es ändert nur die Art, wie Sie das Problem angehen.

Was ich in der Vergangenheit getan haben, ist eine von zwei Ansätze:

  1. Um ‚virtuelle Eigenschaften‘ zu einem AR hinzufügen, zum Beispiel mein Login (Benutzer) Klasse hat eine Eigenschaft „Rollen“, die wird von einem JOIN in seiner standardmäßigen Ladeabfrage aufgefüllt.

  2. Um ein Berichtsobjekt zu erstellen, das ich für komplexere Situationen erweitere. Die Berichtsunterklassen haben eine Eigenschaft, bei der es sich um die Abfrage für mehrere Tabellen handelt, und andere Eigenschaften, die Parameter für die WHERE-Klausel darstellen. Die Klasse erzeugt ein Array von Arrays.

+0

Interessant. Ich bin relativ neu, so dass Ihr Rat wirklich geschätzt wird. Ich könnte eine Member-Variable in meiner Benutzerklasse erstellen und sehen, wie ich damit zurecht komme. Danke für die Hilfe. – Alex

0

Was ich dieses Problem zu tun am Ende zu lösen war im Innern der Member ein Project und ein User Objekt zu erstellen. Die Objekte wurden erstellt, als das Element erstellt wurde. Funktioniert in Ordnung.

Verwandte Themen