Magento 2 如何连查

在运行 Magento 2 项目时,连查是很常见的操作。为了让您轻松地做到这一点,Mageplaza 的开发团队建议在 Magento 2 中的2个表之间连查数据,在本话题中,我将指导你如何获得所有的订单与指定的付款方式,如“支票汇票(Check Money Order)”。

在 Magento 2 中两表联合查询教程概览

  • 第一步:设置一个扩展的集合类
  • 第二步:设置你自己的函数获取数据
  • 第三步:获取集合并调用 filterOrder 函数
  • 第四步:保存

第一步:设置一个扩展的集合类

在第一步中,从扩展 \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection 集合类开始

class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection

在这个集合类中,有两个参数需要你理解:

  • 第一个是模块名称
  • 第二个是 Magento sales 模块的 Sale order resource 模块
protected function _construct()
    {
        $this->_init('Mageplaza\HelloWorld\Model\YourModel', 'Magento\Sales\Model\ResourceModel\Order');
    }

第二步:设置你自己的函数获取数据

使用代码脚本设置自己的函数,然后获取你需要的数据。

protected function filterOrder($payment_method)
{
    $this->sales_order_table = "main_table";
    $this->sales_order_payment_table = $this->getTable("sales_order_payment");
    $this->getSelect()
        ->join(array('payment' =>$this->sales_order_payment_table), $this->sales_order_table . '.entity_id= payment.parent_id',
        array('payment_method' => 'payment.method',
            'order_id' => $this->sales_order_table.'.entity_id'
        )
    );
    $this->getSelect()->where("payment_method=".$payment_method);
}

第三步:获取集合并调用 filterOrder 函数

在你的模块中,你需要获取集合并在之前调用 filterOrder 函数。

$collection = $this->YourCollectionFactory->create();

$collection->filterOrder("checkmo");

foreach ($collection as $item) {
    //do what you want with the data here.
}

第四步:保存

最后,保存 Magento 2 中所有已经完成的连查数据。

本教程翻译自Mageplaza模块开发系列,其他内容请点击下面链接: