Magento 2: Получайте заказы по способу оплаты


Я использую приведенный ниже код в своем блоке для получения всех заказов,

public function getOrders()
    {
        if (!($customerId = ObjectManager::getInstance()
                ->create('Magento\Customer\Model\SessionFactory')->create()
                ->getCustomer()->getId())) {
            return false;
        }
        if (!$this->orders) {
            $this->orders = $this->getOrderCollectionFactory()->create($customerId)->addFieldToSelect(
                '*'
            )->addFieldToFilter(
                'status',
                ['in' => $this->_orderConfig->getVisibleOnFrontStatuses()]
            )->setOrder(
                'created_at',
                'desc'
            );
        }
        return $this->orders;
    }

Как я могу добавить к нему фильтр, чтобы получать все заказы по способу оплаты?

Я пробовал использовать

addFieldToFilter ("метод", "ccsave");

Но, похоже, это не работает.

 3
Author: Dark 73, 2017-11-29

1 answers

Вы не можете напрямую фильтровать сбор заказов по способу оплаты.

Для достижения этого вам следует выполнить соединение mysql в таблице базы данных sales_order_payment с вашей коллекцией заказов.

if (!$this->orders) {
    $pMethod = 'ccsave';

    $this->orders = $this->getOrderCollectionFactory()->create($customerId)->addFieldToSelect(
        '*'
    )->addFieldToFilter(
        'status',
        ['in' => $this->_orderConfig->getVisibleOnFrontStatuses()]
    );
    /* join with payment table */
    $this->orders->getSelect()
    ->join(
        ["sop" => "sales_order_payment"],
        'main_table.entity_id = sop.parent_id',
        array('method')
    )
    ->where('sop.method = ?',$pMethod );

    $this->orders->setOrder(
        'created_at',
        'desc'
    );

}
 4
Author: Amit Bera, 2017-11-29 09:16:58