Antworten:
Verweisen Sie auf die folgende Funktion:
Klasse: Magento \ Sales \ Block \ Order \ History
/**
* @return bool|\Magento\Sales\Model\ResourceModel\Order\Collection
*/
public function getOrders()
{
if (!($customerId = $this->_customerSession->getCustomerId())) {
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;
}
Wenn irgendwelche Probleme haben. Bitte kommentieren. Ich werde versuchen zu lösen.
Sie können diesen Code in Ihrem benutzerdefinierten Modul verwenden.
<?php
namespace 'YOUR_CUSTOM_NAME_SPACE';
class YOURCALSS extends \Magento\Framework\App\Action\Action
{
protected $_orderCollectionFactory;
public function __construct(
Magento\Framework\App\Action\Context $context,
\Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory
) {
$this->_orderCollectionFactory = $orderCollectionFactory;
parent::__construct($context);
}
}
public function YOURFUNCTION()
{
$collection = $this->_orderCollectionFactory->create()->addAttributeToSelect('*')->addFieldToFilter($field, $condition);
}
}
}
Hinweis: Als ich zum ersten Mal auf diese Frage stieß, hatte ich gerade erst angefangen und konnte nicht verstehen, wie ich die obigen Antworten in meinem Code verwenden sollte. Deshalb schreibe ich diese Antwort als Referenz für jeden Anfänger, der wie ich auf diese Frage stößt.
So habe ich in den letzten 3 Tagen alle Bestellungen erhalten, deren Status "Ausstehend" lautet.
<?php
namespace <Your Namespace Here>;
use \Psr\Log\LoggerInterface;
class Test {
protected $logger;
protected $orderRepository;
protected $searchCriteriaBuilder;
public function __construct(
LoggerInterface $logger,
\Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
) {
$this->logger = $logger;
$this->orderRepository = $orderRepository;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
}
public function execute() {
$date = (new \DateTime())->modify('-3 day');
$searchCriteria = $this->searchCriteriaBuilder
->addFilter(
'status',
'pending',
'eq'
)->addFilter(
'created_at',
$date->format('Y-m-d'),
'gt'
)->create();
$orders = $this->orderRepository->getList($searchCriteria);
foreach ($orders->getItems() as $order) {
//Your Code Here
$this->logger->info("Order# {$order->getIncrementId()} - Creation Date: {$order->getCreatedAt()}");
}
}
}
<?php
namespace CustomAPI\MyRecentOrder\Model;
use CustomAPI\MyRecentOrder\Api\MyRecentOrderInterface;
//use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as productCollectionFactory;
//use Magento\Catalog\Api\ProductRepositoryInterface as productRepository;
class MyRecentOrder implements MyRecentOrderInterface
{
//protected $logger;
protected $orderRepository;
protected $searchCriteriaBuilder;
public function __construct(
\Psr\Log\LoggerInterface $logger,
\Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
)
{
$this->logger = $logger;
$this->_orderRepository = $orderRepository;
$this->_searchCriteriaBuilder = $searchCriteriaBuilder;
}
public function getMyRecentOrder($email,$pagesize,$curpage){
try{
$searchCriteria = $this->_searchCriteriaBuilder
->addFilter(
'status',
'pending',
'eq'
)->addFilter(
'customer_email',
$email
)->create();
$orders = $this->_orderRepository->getList($searchCriteria)
->addAttributeToSelect('entity_id')
->addAttributeToSelect('created_at')
->addAttributeToSelect('grand_total')
->addAttributeToSelect('status')
->setPageSize($pagesize)
->setCurPage($curpage);
return $orders->getData();
}
catch(\Exception $e){
$this->logger->info($e->getMessage());
return false;
}
}
}
//