Wie bekomme ich ein Objekt mit "id" aus der Prop-Objektsammlung?

8

Ich benutze Propel 1.6 und bin mir nicht sicher, wie man ein Objekt (mit seinem "id" -Attributwert) aus einer Prop-Objekt-Sammlung erhält. Ich konnte in Propels Dokumentation keine direkte Antwort finden ( PropelCollection-Methoden scheinen nicht anwendbar zu sein?). Beispielsweise: Sagen wir, ich habe eine Tabelle "Person" mit dem folgenden Schema:

%Vor%

Ich mache die folgende Abfrage, um eine Sammlung von "Person" -Objekten zu erhalten:

%Vor%

Dann möchte ich ein "Person" -Objekt mit einer gegebenen "ID" (z. B. "Person" mit "id = 3") finden, ohne eine neue Abfrage für die Datenbank zu erstellen. Wie kann ich es tun?

%Vor%

Mit anderen Worten, ich möchte nicht tun:

%Vor%

Kontext:

Ich möchte verhindern, dass eine Datenbankabfrage durchgeführt wird, um die Leistung zu verbessern. Die Anweisung muss in eine foreach-Anweisung eingefügt werden, die ansonsten zu zahlreichen Datenbankverbindungen führen würde, wie folgt:

%Vor%     
RayOnAir 03.09.2012, 16:30
quelle

5 Antworten

4

Nun, das wird nicht sehr effizient sein, aber Sie können durch die Sammlung gehen, um es zu finden.

%Vor%     
j0k 03.09.2012, 16:34
quelle
7

Eine weitere Alternative, besonders wenn Sie mehrere Male suchen müssen, besteht darin, ein Array von Objekten per ID mit $ collection- & gt; getArrayCopy ('Id') zu erhalten.

%Vor%

Dann können Sie

tun %Vor%

oder

%Vor%     
Ventzy Kunev 25.07.2014 20:04
quelle
3

Da Propel das Abfrageergebnis nicht ordnungsgemäß zwischenspeichert, müssen Sie die Auflistung iterieren (als @ j0k ). Anstatt eine foreach -Schleife zu verwenden, können Sie array_filter aufrufen und eine Schließung (mit PHP 5.3) übergeben.

%Vor%

Wenn Sie sicher sind, dass die Person gefunden wird, können Sie (mit PHP 5.4) auch die folgenden Zeilen schreiben:

%Vor%     
Florent 04.09.2012 08:12
quelle
2

Wenn Sie Propel :: isInstancePoolingEnabled () setzen, ist true (das ist standardmäßig true), dann können Sie

%Vor%

Entschuldigung für mein Englisch.

    
user2663223 26.08.2013 09:41
quelle
1

Die Alternative mit Propel & gt; = 1.5 zu user2663223's Antwort wäre:

%Vor%

Dies nutzt den Instanzpool aus. Intern verwendet es: getInstanceFromPool, wenn die SQL-Abfrage zuvor ausgeführt wurde.

Weitere Informationen finden Sie in:

Ссылка

    
netadictos 11.07.2014 12:42
quelle

Tags und Links