Magento: "status" und "state"

Ein bemerkenswertes Verhalten von Magento hat bei uns für etwas Verwirrung gesorgt. Man konnte per Code in Bestellungen perfekt nach dem Bestellstatus "pending" filtern. In in dem darauf hin gelieferten Objekt befand sich die korrekte Anzahl an Bestellungs-Objekten - Aber angeblich war keins vom Status "pending". Des Rätsels Lösung ist banaler als gedacht.

Filtert man Bestellungen unter Anderem mit dem Status "pending", so erhält man sie auch.

        $orders = Mage::getResourceModel('sales/order_collection')
	->addFieldToFilter('status', array("in" => array(
		'processing','pending')
	))
	->load();
    

Im darauf hin gelieferten Order-Objekt erhält man den Status dann mittels der Methode "getState()".

        foreach ($orders as $order) {
	echo $order->getState() . ", ";
}
    

Wer nun aber erwartet, dass getState() ebenfalls den Status "pending" liefert, der wird sich schwer wundern. In diesem Fall liefert diese Methode nämlich nicht das erwartete "pending", sondern ein "new".

        new, processing, new
    

Wenn dieser Fall also einmal eintreten sollte: Keine Sorge, alles ist gut - Und das Magento-Kuriositätenkabinett um einen Eintrag reicher.

Solche Eigenheiten kennt jeder, der lange genug mit Magento 1 gearbeitet hat. Falls Du abwägst, ob sich der Aufwand noch lohnt: Auf unserer Seite zur Shopware-6-Migration steht, wie ein Umzug abläuft – inklusive Bestellhistorie und Status-Mapping.