2012-04-10 6 views
1

Was wäre der beste Weg, um Propel zu fragen, ob existierendes Objekt (abgerufen oder neu erstellt) bestimmten Kriterien entspricht. Ich frage mich, ob Propel native Fähigkeit hat, dies zu tun :-) Ich frage nach einfachen Wegen, weil dies die komplizierte Art und Weise ist einfach. Im Idealfall so etwas wie:Propel: testet existierendes Objekt auf Übereinstimmung mit den Kriterien

$fruit = FruitPeer::doSelectOne(new Criteria); // get whatever fruit 

    $crit1 = new Criteria; 
    $crit1->add(FruitPeer::REF_COLOR, 'green');  // criteria for green fruits 

    if ($fruit->matches($crit1)) {     // check if my fruit is green 
     echo 'My fruit is green'; 
    } 

Antwort

1

Dies ist in trivialer Weise nicht möglich ist, werden seit Kriterien Objekte nur verwendet SQL-Abfragen zu generieren und nicht Objekte zu entsprechen. Sie können jedoch nur die Datenbank erneut abfragen. Die Instanzenpools von Propel sollten vermeiden, dass alle Daten erneut abgerufen werden, wenn festgestellt wird, dass eine Instanz eines abgefragten Objekts bereits vorhanden ist.

0

Wahrscheinlich die einfachste Sache, die Sie tun können, ist, eine Bedingung auf Ihrem Primärschlüssel hinzuzufügen und dann eine Zählung auszustellen.

Wenn Sie eine Abfrage (ModelCriteria Instanz anstelle eines einfachen Criteria Instanz) haben, können Sie diese in einer Zeile tun:

if($critQuery1->filterByPrimaryKey($fruit->getPrimaryKey())->count() > 0) {…}