【问题标题】:how to get order collection object in magento 2如何在magento 2中获取订单集合对象
【发布时间】:2016-07-05 05:46:27
【问题描述】:

我是 magento2 的初学者,我会尝试检索所有与订单相关的 信息和该信息只想显示在管理端 比如订单ID、订单状态、店铺名称、订单日期、 付款方式等 在这里,我尝试获取订单信息,例如订单 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');    }    }

【问题讨论】:

    标签: magento2


    【解决方案1】:

    在您的块文件中

    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;
    }
    

    在你的 phtml 文件中

    $_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";
    }
    

    【讨论】:

    • 这不再适用于 M2.2。它给出错误“未捕获的错误:在 null 上调用成员函数 create()”
    【解决方案2】:

    你可以通过下面的代码

    <?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;
    }       
    }
    

    【讨论】:

    • 感谢您的回答。这是可行的,但我找到了较早的解决方案,如下所示
    • 您的 getSalesOrderCollection 函数中缺少一个 foreach。
    【解决方案3】:

    获取您的所有订单信息

      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);
     }
    

    【讨论】:

    • 嗨,@taps 感谢您的回复,但它对我不起作用。给出错误。
    【解决方案4】:
    $objectManager =  \Magento\Framework\App\ObjectManager::getInstance();
    $orderDatamodel = $objectManager->get('Magento\Sales\Model\Order')->getCollection();
    foreach($orderDatamodel as $orderDatamodel1){
    print_r($orderDatamodel1->getData());
    
    }
    

    【讨论】:

    • 最好再补充一些说明而不仅仅是代码sn-p,这样其他人可以理解。
    【解决方案5】:
    <?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;
        }
    }
    

    【讨论】:

    • 使用此代码在您的模块中加载销售订单集合。结果将显示在 store->magento2 中的配置中
    【解决方案6】:

    我正在共享 SQL 查询,您将在其中获得相应的已下订单数据详细信息,这意味着您将通过 SQL 查询在 Magento2 中获得报告项目:-

    选择 so.increment_id
    作为订单 ID, 所以状态AS 订单状态, soi.sku 作为 Sku, soi.original_price AS MRP_WithTax , soi.qty_ordered AS 数量_订单, soi.price AS MRP_WTP, soi.discount_percent AS 折扣_百分比, soi.discount_amount AS 折扣_金额, so.shipping_amount AS 运费金额, soi.price_incl_tax * soi.qty_ordered - soi.discount_amount AS RowTotal, soi.tax_percent AS 税收百分比, soi.tax_amount AS TaxAmount, sig.increment_id AS InvoiceId, sig.created_at AS InvoiceDate , 案子 当 sig.increment_id = sig.increment_id THEN '付费' 其他“未付费” END AS status FROM sales_order 所以 LEFT JOIN sales_order_address soa ON so.shipping_address_id = soa.entity_id 左连接 sales_order_item soi ON so.entity_id = soi.order_id 左加入 catalog_category_product ccp ON soi.product_id = ccp.product_id 左连接 catalog_category_entity_varchar ccev ON ccp.category_id = ccev.entity_id 左加入 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中,根据日期过滤器获取数据。

    希望对您有所帮助,如果您有任何疑虑或疑问,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多