Frage

Ich suche derzeit nach einer Methode, aus der ich den Bestellstatus basierend auf dem erhalten kann order id, customer email und customer last name.

Ich hatte diesen Code bisher geschrieben

public function orderHistoryAction(){
    $req = $this->getRequest();
    $oid = $req->getParam('oid', '');
    $lnm = $req->getParam('lnm', '');
    $eml = $req->getParam('eml', '');

    $order = Mage::getModel('sales/order')->loadByIncrementId($oid);
    if ($order->getId()) {
        if ((strcasecmp($lnm, $order->getCustomerLastname()) == 0) && (strcasecmp($eml, $order->getCustomerEmail()) == 0)) {
            echo $order->getStatusLabel();
        } else {
            echo 'invalid';
        }
    } else {
        echo 'invalid';
    }
}

und funktioniert gut für beide Kunde und Gast. Aber das scheint mir nicht der richtige Ansatz. Ich soll so etwas wie geschrieben verwenden Dieser Blog oder Dieser Blog. Wenn mich jemand richtig machen könnte?

War es hilfreich?

Lösung

Wenn Sie Sammlungen verwenden möchten, können Sie Ihr Bestellobjekt wie folgt erhalten:

$collection = Mage::getModel('sales/order')->getCollection()
    ->addAttributeToFilter('increment_id', $oid)
    ->addAttributeToFilter('customer_lastname', $lnm)
    ->addAttributeToFilter('customer_email', $eml);
$order = $collection->getFirstItem();
if ($order->getId()) { 
    echo $order->getStatusLabel();
}
else {
    echo 'invalid';
}

Aber es ist das gleiche, was du getan hast.
Ich bin sogar, dass Ihr Ansatz schneller ist.
In Ihrem Fall führen Sie eine solche Auswahl aus.

SELECT * FROM sales_flat_order WHERE increment_id = '100000005';

In dem Ansatz habe ich beschrieben, dass Sie so etwas betreiben:

SELECT * FROM sales_flat_order WHERE increment_id = '100000005' AND customer_lastname='DOE' AND customer_email = 'john.doe@example.com';

Die zusätzlichen Bedingungen sind nicht erforderlich, da die increment_id muss einzigartig sein.

Andere Tipps

Wie Marius sagte, benötigen Sie keine Sammlung für diesen speziellen Fall. Wenn Sie mehrere Bestellstatus auflisten müssen, würden Sie eine Sammlung verwenden. Um Ihren Code generischer zu gestalten (damit Sie ihn mit Sammlungen verwenden können), würde ich die Schnittstelle ein wenig ändern:

public function getOneOrderHistoryAction() {
    // extract the parameters from $this->request and pass on
    ...
    return $this->getOrderHistory($oid, $nlm, $eml);
}

public function getOrderHistory($oid, $nlm, $eml) {
    // use the arguments provided
    ...
}    

Auch eine kleine Verbesserung vielleicht: Ich denke, Sie wollen strncasecmp.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top