如何在 magento 2 中获取订单集合对象
how to get order collection object in magento 2
我是 magento2 的初学者,我会尝试检索所有与订单相关的内容
信息和那些信息只想显示在管理员端
比如订单号,订单状态,店铺名称,订单日期,
付款方式等
在这里,我尝试获取订单信息,如订单 ID、订单状态,但是
页面将重定向到主页/仪表板。
我使用产品集合对象获取产品相关信息,但我如何获取所有订单信息。
我不知道如何使用订单收集获取订单信息
对象或订单存储库对象以及订单信息显示
在 magento2 的管理员端。
这是我的观点,或者 info.phtml
文件是:
<?php $_order = $block->getOrder(3);
$orderAdminDate = $block->formatDate(
$block->getOrderAdminDate($_order->getCreatedAt()),
\IntlDateFormatter::MEDIUM, true );
echo 'Order Status = '.$_order->getStatusLabel();
echo 'Order Id = '. $_order->getRealOrderId(); ?>
这是我的 Info.php
块文件:
class Info extends \Magento\Sales\Block\Adminhtml\Order\AbstractOrder
{
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Sales\Model\Order\Address\Renderer $addressRenderer,
array $data = []
) { $this->addressRenderer = $addressRenderer;
parent::__construct($context, $adminHelper, $data);
}
public function getOrder()
{ return $this->_coreRegistry->registry('current_order'); } }
你可以通过下面的代码
<?php
namespace 'moduleNameSpace';
class ModelClass extends \Magento\Framework\View\Element\Template
{
protected $_orderCollectionFactory;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory,
array $data = []
) {
$this->_orderCollectionFactory = $orderCollectionFactory;
parent::__construct($context, $data);
$this->_isScopePrivate = true;
}
protected function _construct()
{
parent::_construct();
$this->_orderCollectionFactory->create()->addAttributeToSelect('*')
}
public function getSalesOrderCollection(array $filters = []){
return $this->orderCollectionFactory;
}
}
获取您所有的订单信息
public function __construct(
\Psr\Log\LoggerInterface $_logger,
\Magento\Sales\Model\Order $_orderModel
) {
$this->_logger = $_logger;
$this->_orderModel = $_orderModel;
}
public function getOrders($store){
$orders = $this->_orderModel->getCollection();
$orders->join(array('item' => 'sales_order_item'), 'main_table.entity_id = item.order_id AND main_table.store_id='.$store.' ');
$orders->getSelect()->group('main_table.entity_id');
$orders->getSelect()->order('main_table.created_at DESC');
$this->_logger->info($orders); //find your query in system.log
$order_array = array();
foreach($orders as $k=>$order) {
$order_array[$k] = array(
'order_id' => $order->getId(),
'order_incremental_id' => $order->getIncrementId(),
'order_status' => $order->getStatusLabel(),
'order_date' => $order->getCreatedAt(),
'customer_name' => $order->getCustomerName()
//as your need
);
}
return json_encode($order_array);
}
In your Block file
namespace "Your Module namespace";
class modelclass extends \Magento\Framework\View\Element\Template {
/** @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory */
protected $_orderCollectionFactory;
/** @var \Magento\Sales\Model\ResourceModel\Order\Collection */
protected $orders;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context, \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory, array $data = []
) {
$this->_orderCollectionFactory = $orderCollectionFactory;
parent::__construct($context, $data);
}
public function getOrders() {
if (!$this->orders)
{
$this->orders = $this->_orderCollectionFactory->create()->addFieldToSelect('*');
}
return $this->orders;
}
In your phtml file
$_orders = $block->getOrders();
if ($_orders && count($_orders)) {
$complete = $pending = $closed = $canceled = $processing = $onHold = 0;
foreach ($_orders as $_order) {
$label = $_order->getStatusLabel();
switch ($label) {
case 'Complete' : $complete++;
break;
case 'Pending' : $pending++;
break;
case 'Processing' : $processing++;
break;
case 'Canceled' : $canceled++;
break;
case 'Closed' : $closed++;
break;
}
}
echo "Order Status <br>";
echo "Completed Order " . $complete . "<br>";
echo "Pending Order " . $pending . "<br>";
echo "Closed Order " . $closed . "<br>";
echo "Canceled Order " . $canceled . "<br>";
echo "Processing Order" . $processing . "<br>";
}
else{
echo "You have no Orders";
}
<?php
namespace namespace\modulename\Model\Config\Source;
use Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory;
class OrderStatus implements \Magento\Framework\Option\ArrayInterface
{
protected $options = null;
protected $collectionFactory;
public function __construct(
CollectionFactory $collectionFactory
) {
$this->collectionFactory = $collectionFactory;
}
public function toOptionArray()
{
if ($this->options === null) {
$status = $this->collectionFactory->create();
foreach ($status as $stat) {
$this->options[] = [
'value' => $stat->getStatus(),
'label' => $stat->getLabel(),
];
}
}
return $this->options;
}
}
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$orderDatamodel = $objectManager->get('Magento\Sales\Model\Order')->getCollection();
foreach($orderDatamodel as $orderDatamodel1){
print_r($orderDatamodel1->getData());
}
我正在分享 SQL 查询,您将在其中相应地获取下订单数据的详细信息,这意味着您将通过 SQL 查询在 Magento2 中明智地获取报告项目:-
SELECT so.increment_id
AS OrderId,
so.status AS
Order_Status,
soi.sku AS Sku,
soi.original_price AS MRP_WithTax
,
soi.qty_ordered AS
Qty_Order,
soi.price AS MRP_WTP,
soi.discount_percent AS
Discount_Percent,
soi.discount_amount AS
Discount_Amount,
so.shipping_amount AS
ShippingAmount,
soi.price_incl_tax * soi.qty_ordered - soi.discount_amount AS RowTotal,
soi.tax_percent AS Taxpercent,
soi.tax_amount AS TaxAmount,
sig.increment_id AS InvoiceId,
sig.created_at AS InvoiceDate
,
CASE
WHEN sig.increment_id = sig.increment_id THEN 'Paid'
ELSE 'NonPaid'
END AS status FROM sales_order so
LEFT JOIN sales_order_address soa
ON so.shipping_address_id = soa.entity_id
LEFT JOIN sales_order_item soi
ON so.entity_id = soi.order_id
LEFT JOIN catalog_category_product ccp
ON soi.product_id = ccp.product_id
LEFT JOIN catalog_category_entity_varchar ccev
ON ccp.category_id = ccev.entity_id
LEFT JOIN sales_invoice_grid sig
ON sig.order_increment_id = so.increment_id WHERE ( so.created_at BETWEEN '2017-03-01 'AND '2019-03-01' ) GROUP BY
soi.item_id
您刚刚在SQL格式化程序中复制并粘贴到PHPMYADMIN中,根据日期筛选器获取数据。
希望对您有所帮助,如果您有任何疑问或疑问,请告诉我。
我是 magento2 的初学者,我会尝试检索所有与订单相关的内容 信息和那些信息只想显示在管理员端 比如订单号,订单状态,店铺名称,订单日期, 付款方式等 在这里,我尝试获取订单信息,如订单 ID、订单状态,但是 页面将重定向到主页/仪表板。
我使用产品集合对象获取产品相关信息,但我如何获取所有订单信息。
我不知道如何使用订单收集获取订单信息 对象或订单存储库对象以及订单信息显示 在 magento2 的管理员端。
这是我的观点,或者 info.phtml
文件是:
<?php $_order = $block->getOrder(3);
$orderAdminDate = $block->formatDate(
$block->getOrderAdminDate($_order->getCreatedAt()),
\IntlDateFormatter::MEDIUM, true );
echo 'Order Status = '.$_order->getStatusLabel();
echo 'Order Id = '. $_order->getRealOrderId(); ?>
这是我的 Info.php
块文件:
class Info extends \Magento\Sales\Block\Adminhtml\Order\AbstractOrder
{
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Sales\Model\Order\Address\Renderer $addressRenderer,
array $data = []
) { $this->addressRenderer = $addressRenderer;
parent::__construct($context, $adminHelper, $data);
}
public function getOrder()
{ return $this->_coreRegistry->registry('current_order'); } }
你可以通过下面的代码
<?php
namespace 'moduleNameSpace';
class ModelClass extends \Magento\Framework\View\Element\Template
{
protected $_orderCollectionFactory;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory,
array $data = []
) {
$this->_orderCollectionFactory = $orderCollectionFactory;
parent::__construct($context, $data);
$this->_isScopePrivate = true;
}
protected function _construct()
{
parent::_construct();
$this->_orderCollectionFactory->create()->addAttributeToSelect('*')
}
public function getSalesOrderCollection(array $filters = []){
return $this->orderCollectionFactory;
}
}
获取您所有的订单信息
public function __construct(
\Psr\Log\LoggerInterface $_logger,
\Magento\Sales\Model\Order $_orderModel
) {
$this->_logger = $_logger;
$this->_orderModel = $_orderModel;
}
public function getOrders($store){
$orders = $this->_orderModel->getCollection();
$orders->join(array('item' => 'sales_order_item'), 'main_table.entity_id = item.order_id AND main_table.store_id='.$store.' ');
$orders->getSelect()->group('main_table.entity_id');
$orders->getSelect()->order('main_table.created_at DESC');
$this->_logger->info($orders); //find your query in system.log
$order_array = array();
foreach($orders as $k=>$order) {
$order_array[$k] = array(
'order_id' => $order->getId(),
'order_incremental_id' => $order->getIncrementId(),
'order_status' => $order->getStatusLabel(),
'order_date' => $order->getCreatedAt(),
'customer_name' => $order->getCustomerName()
//as your need
);
}
return json_encode($order_array);
}
In your Block file
namespace "Your Module namespace";
class modelclass extends \Magento\Framework\View\Element\Template {
/** @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory */
protected $_orderCollectionFactory;
/** @var \Magento\Sales\Model\ResourceModel\Order\Collection */
protected $orders;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context, \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory, array $data = []
) {
$this->_orderCollectionFactory = $orderCollectionFactory;
parent::__construct($context, $data);
}
public function getOrders() {
if (!$this->orders)
{
$this->orders = $this->_orderCollectionFactory->create()->addFieldToSelect('*');
}
return $this->orders;
}
In your phtml file
$_orders = $block->getOrders();
if ($_orders && count($_orders)) {
$complete = $pending = $closed = $canceled = $processing = $onHold = 0;
foreach ($_orders as $_order) {
$label = $_order->getStatusLabel();
switch ($label) {
case 'Complete' : $complete++;
break;
case 'Pending' : $pending++;
break;
case 'Processing' : $processing++;
break;
case 'Canceled' : $canceled++;
break;
case 'Closed' : $closed++;
break;
}
}
echo "Order Status <br>";
echo "Completed Order " . $complete . "<br>";
echo "Pending Order " . $pending . "<br>";
echo "Closed Order " . $closed . "<br>";
echo "Canceled Order " . $canceled . "<br>";
echo "Processing Order" . $processing . "<br>";
}
else{
echo "You have no Orders";
}
<?php
namespace namespace\modulename\Model\Config\Source;
use Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory;
class OrderStatus implements \Magento\Framework\Option\ArrayInterface
{
protected $options = null;
protected $collectionFactory;
public function __construct(
CollectionFactory $collectionFactory
) {
$this->collectionFactory = $collectionFactory;
}
public function toOptionArray()
{
if ($this->options === null) {
$status = $this->collectionFactory->create();
foreach ($status as $stat) {
$this->options[] = [
'value' => $stat->getStatus(),
'label' => $stat->getLabel(),
];
}
}
return $this->options;
}
}
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$orderDatamodel = $objectManager->get('Magento\Sales\Model\Order')->getCollection();
foreach($orderDatamodel as $orderDatamodel1){
print_r($orderDatamodel1->getData());
}
我正在分享 SQL 查询,您将在其中相应地获取下订单数据的详细信息,这意味着您将通过 SQL 查询在 Magento2 中明智地获取报告项目:-
SELECT so.increment_id
AS OrderId, so.status AS Order_Status, soi.sku AS Sku, soi.original_price AS MRP_WithTax , soi.qty_ordered AS Qty_Order, soi.price AS MRP_WTP, soi.discount_percent AS Discount_Percent, soi.discount_amount AS Discount_Amount, so.shipping_amount AS ShippingAmount, soi.price_incl_tax * soi.qty_ordered - soi.discount_amount AS RowTotal, soi.tax_percent AS Taxpercent, soi.tax_amount AS TaxAmount, sig.increment_id AS InvoiceId, sig.created_at AS InvoiceDate , CASE WHEN sig.increment_id = sig.increment_id THEN 'Paid' ELSE 'NonPaid' END AS status FROM sales_order so LEFT JOIN sales_order_address soa ON so.shipping_address_id = soa.entity_id LEFT JOIN sales_order_item soi ON so.entity_id = soi.order_id LEFT JOIN catalog_category_product ccp ON soi.product_id = ccp.product_id LEFT JOIN catalog_category_entity_varchar ccev ON ccp.category_id = ccev.entity_id LEFT JOIN sales_invoice_grid sig ON sig.order_increment_id = so.increment_id WHERE ( so.created_at BETWEEN '2017-03-01 'AND '2019-03-01' ) GROUP BY soi.item_id
您刚刚在SQL格式化程序中复制并粘贴到PHPMYADMIN中,根据日期筛选器获取数据。
希望对您有所帮助,如果您有任何疑问或疑问,请告诉我。