php - 如何在 Magento 2.3 中加入两个自定义表
问题描述
我有两个表,如下 pscustom_catalog_product_entity
pscustom_catalog_product_entity_media
我已经使用资源模型和块为表pscustom_catalog_product_entity创建了集合。
现在我可以使用集合访问这个表数据。
app/code/MyModule/Productsinfo/Model/Product.php
<?php
namespace MyModule\Productsinfo\Model;
use Magento\Framework\Model\AbstractModel;
use MyModule\Productsinfo\Model\ResourceModel\Product as ResourceModel;
class Product extends AbstractModel
{
protected function _construct()
{
$this->_init(ResourceModel::class);
}
}
app/code/MyModule/Productsinfo/Model/ResourceModel/Product.php
<?php
namespace MyModule\Productsinfo\Model\ResourceModel;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
class Product extends AbstractDb
{
protected function _construct()
{
$this->_init('pscustom_catalog_product_entity', 'entity_id');
}
}
app/code/MyModule/Productsinfo/Model/ResourceModel/Product/Collection.php
<?php
namespace MyModule\Productsinfo\Model\ResourceModel\Product;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use MyModule\Productsinfo\Model\Product as Model;
use MyModule\Productsinfo\Model\ResourceModel\Product as ResourceModel;
class Collection extends AbstractCollection
{
protected function _construct()
{
$this->_init(Model::class, ResourceModel::class);
}
}
app/code/MyModule/Productsinfo/Block/Product.php
<?php
namespace MyModule\Productsinfo\Block;
use Magento\Framework\View\Element\Template;
use MyModule\Productsinfo\Model\ResourceModel\Product\Collection;
class Product extends Template
{
/**
* @var Collection
*/
private $collection;
/**
* Hello constructor.
* @param Template\Context $context
* @param Collection $collection
* @param array $data
*/
public function __construct(
Template\Context $context,
Collection $collection,
array $data = []
)
{
parent::__construct($context, $data);
$this->collection = $collection;
}
public function getAllProducts() {
return $this->collection;
}
我可以使用getAllProducts()方法获取产品集合。现在我想将表pscustom_catalog_product_entity集合加入表pscustom_catalog_product_entity_media。我尝试了很多解决方案,但它不起作用。任何帮助,将不胜感激。
谢谢。
解决方案
我认为您可以通过以下方式加入表格:
$this->getSelect()->join(
['secondTable'=>$this->getTable('pscustom_catalog_product_entity')],
'main_table.id = secondTable.entity_id','*');
$this->getSelect()->join(
['thirdTable'=>$this->getTable('pscustom_catalog_product_entity_media')],
'main_table.id = thirdTable.entity_id', '*');
}
这是在集合中加入两个表的最简单方法
推荐阅读
- azure - 使用 Azure 数据工厂将数据从 Azure SQL 数据库迁移到 Dynamics 365 for Marketing
- python - h5py hdf5 从组成员中提取属性到列表中
- python - 如何通过 Python 更改 ElasticSearch 中布尔字段的值?
- docker - 如何在 Docker 容器中以非 root 用户身份启动 crond?
- python - 如何查找在 ECS 容器上创建的文件?
- c++ - 将浮点数的高度图数组导出为 16 位原始数据
- sql - 如何比较plsql中具有相同列的两个表?
- php - wordpress 插件中的常量
- javascript - 我可以映射一个数组并将变量转换为几个不同的值吗?
- python - 通过 Molecule 运行时,Testinfra 看不到 nginx