Ich tue Folgendes, um einige Bestellungen für den Export aus dem System zu bekommen:
$orders = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('status', $statusToExport)
->addFieldToFilter('store_id', $this->processingStoreId)
->addFieldToFilter('updated_at', array('gteq' => date('Y-m-d H:i:s', $lastSyncTime)));
Ich muss etwas hinzufügen, das nicht exportiert werden kann, wenn sich die Reihenfolge entity_id
in einer benutzerdefinierten Tabelle befindet, die ich habe. Wenn ich SQL verwenden würde, würde ich Folgendes tun:
left join myTable as mt on main_table.entity_id = mt.entity_id
where mt.entity_id is null
Ich bin mir jedoch nicht sicher, wie ich die Sammlungsabfrage ändern soll, um etwas Ähnliches zu tun.
Hinweis: Ich habe es versucht
$orders = $orders->getSelect()
->joinLeft(
array("t1" => $myTable),
"main_table.entity_id = t1.entity_id",
array("admin_field_id" => "t1.id")
)
->where("t1.id is null")
Dies ändert sich jedoch, sodass es sich um eine Abfrage handelt, und ich möchte, dass der Verkaufs- / Auftragsbestand zurückgegeben wird.
Mir fehlt etwas Einfaches ...
BEARBEITEN
Ok, ich habe es versucht:
$orders->getSelect()
->joinLeft(
array("t1" => $myTable),
"main_table.entity_id = t1.entity_id",
array("admin_field_id" => "t1.id")
)
->where("t1.id is null");
Wenn ich ein Echo (string)$orders->getSelect()
erhalte, wird die erwartete Abfrage zurückgegeben. Wenn ich sie ausführe, werden keine Ergebnisse zurückgegeben. $orders
Enthält jedoch noch Elemente. Ich dachte, dass dieser Join die Sammlung zu diesem Zeitpunkt ändern sollte?
quelle
$orders->getSelect() ->joinLeft(array("t1" => $myTable), "main_table.entity_id = t1.entity_id", array("admin_field_id" => "t1.id")) ->where("t1.id is null")
die Artikel, basierend auf Ihrem ersten Punkt, nicht von meiner aktuellen Liste ausschließen?Ich habe den Grund dafür gefunden.
Ich wollte eine Anzahl von Werten, bevor ich die linke Verknüpfung anwendete, also fügte ich hinzu
Dies führte jedoch dazu, dass die Sammlung geladen wurde, was wiederum bedeutete, dass der Link-Join, den ich weiter machte, ignoriert wurde. Beim Debuggen
_isCollectionLoaded
war es ein guter Tipp von Fabian , sich den var anzuschauen.Ich mache dies jetzt stattdessen, um die Zählung der Sammlung zu erhalten:
Auf diese Weise kann ich die Ergebnisse zählen, ohne die
$orders
Sammlung zu laden .Hinweis: Bitte wende alle Upvotes auf Fabians Beitrag an, da er mich dazu geführt hat, aber ich dachte, dass die Lösung eine eigene Antwort rechtfertigt.
quelle