renttek/magento2-search-criteria-processor

适用于 Magento 2 的通用 SearchCriteria 处理器

2.1.0 2021-10-15 13:02 UTC

This package is auto-updated.

Last update: 2024-09-15 19:24:58 UTC


README

辅助库,用于在自定义存储库/查询中处理 M2 SearchCriteria。

Latest Stable Version

许可:MIT

为什么?

"但为什么?你总是可以使用默认的 magento 模型和集合,yada yada" 嗯,我知道,但我不太喜欢它们,因为它们真的很臃肿(我的观点)

功能

此库包含的处理器类将向查询添加以下内容

  • 过滤(过滤器 & 过滤器组)
  • 排序
  • 分页
  • 自动连接*

(*某种程度上的)

基本内容

此库提供了一组处理器,它们向 Magento\Framework\DB\Select 实例添加条件、限制等。每个处理器都实现了 Renttek\SearchCriteriaProcessor\ProcessorInterface

提供了以下 Renttek\SearchCriteriaProcessor\ProcessorInterface 的实现

(每个处理器都在 Renttek\SearchCriteriaProcessor\ 命名空间中)

除了 JoinProcessor 之外,所有处理器都应该相当简单且易于理解。

JoinProcessor

JoinProcessor 从 Magento\Framework\DB\Select 中提取使用的表,并将连接添加到查询中。

为此,JoinProcessor 需要 2 个参数

  1. 字段提取器(Renttek\SearchCriteriaProcessor\FieldExtractor\FieldExtractorInterface
  2. 连接列表(Renttek\SearchCriteriaProcessor\Join\JoinInterface

在处理 SearchCriteria 时,处理器运行字段提取器以获取使用表的列表和字段。然后,将该列表与连接列表进行匹配,以找到支持给定表的实例。然后通过 Join-实例添加连接。如果没有找到匹配的连接,将抛出 \RuntimeException

提供的字段提取器列表

(每个处理器都在 Renttek\SearchCriteriaProcessor\FieldExtractor 命名空间中)

提供的连接列表

(每个连接都在 Renttek\SearchCriteriaProcessor\Join 命名空间中)

用法

在最简单的情况下,DefaultSearchCriteria 就是所需的一切

class Bar
{
    // ...
    /** @var DefaultSearchCriteriaProcessor */
    private $searchCriteriaProcessor;

    public function getList(SearchCriteriaInterface $searchCriteria)
    {
        $select = $this->getBaseSelect();
        $select = $this->searchCriteriaProcessor->process($select, $searchCriteria);

        return $this->fetchResult($select);
    }
    // ...
}

如果您想自定义行为,只需实现一个使用 ProcessorInterface 的自定义处理器。

连接

要启用自动连接,您必须使用 JoinProcessor(直接或间接使用 Default 或 ChainProcessor)并向其提供字段提取器(例如 Renttek\SearchCriteriaProcessor\FieldExtractor\DefaultFieldExtractor)和连接实例列表。此库目前仅提供 LeftJoin 类。

LeftJoin 需要 3 个参数

  1. 要连接的主表中的字段名
  2. 要连接的外部表名
  3. 要连接的外部表中的字段名

安装

通过 composer

composer require renttek/magento2-search-criteria-processor

贡献

您想改进此库,报告或甚至修复一个错误?太棒了!请,这样做:)

您有疑问吗?您可以在这里联系我