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%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% 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.
Wenn Sie sicher sind, dass die Person gefunden wird, können Sie (mit PHP 5.4) auch die folgenden Zeilen schreiben:
%Vor%Wenn Sie Propel :: isInstancePoolingEnabled () setzen, ist true (das ist standardmäßig true), dann können Sie
%Vor%Entschuldigung für mein Englisch.
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: