注文ID、電子メール、顧客の姓から注文ステータスを取得します
-
16-10-2019 - |
質問
現在、次のようにして注文ステータスを取得できる方法を探しています order id
, customer email
と customer last name
.
私はこれまでこのコードを書きました
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';
}
}
両方でうまく機能しています お客様 と ゲスト. 。しかし、これは私には正しいアプローチではないようです。私は書かれたようなものを使うことになっています このブログ また このブログ. 。誰かが私を正しくさせることができたら?
解決
コレクションを使用したい場合は、次のような注文オブジェクトを取得できます。
$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';
}
しかし、それはあなたがしたのと同じことです。
私はあなたのアプローチがより速いことさえあります。
あなたの場合、あなたはこのような選択を実行します。
SELECT * FROM sales_flat_order WHERE increment_id = '100000005';
私が説明したアプローチでは、あなたはこのようなことを実行します:
SELECT * FROM sales_flat_order WHERE increment_id = '100000005' AND customer_lastname='DOE' AND customer_email = 'john.doe@example.com';
以来、追加の条件は必要ありません increment_id
ユニークでなければなりません。
他のヒント
マリウスが言ったように、この特定のケースのためにコレクションは必要ありません。いくつかの注文ステータスをリストする必要がある場合は、コレクションを使用します。コードをより一般的にするために(コレクションで使用できるように)、インターフェイスを少し変更します。
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
...
}
また、小さな改善かもしれません:私はあなたが欲しいと思います strncasecmp.
所属していません magento.stackexchange