Получить статус заказа от идентификатора заказа, электронной почты и фамилии клиента

magento.stackexchange https://magento.stackexchange.com/questions/13686

Вопрос

В настоящее время я ищу метод, из которого я могу получить статус заказа на основе 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top