Holen Sie sich den Bestellstatus aus der Bestell -ID, der E -Mail und des Nachnamens des Kunden
-
16-10-2019 - |
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?
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.