在运行 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 中所有已经完成的连查数据。