renttek / magento2-search-criteria-processor
适用于 Magento 2 的通用 SearchCriteria 处理器
Requires
- php: >=7.4
- magento/framework: >=103.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- phpmd/phpmd: ^2.9
- phpstan/phpstan: ^0.12.55
- phpunit/phpunit: ^9.4
README
辅助库,用于在自定义存储库/查询中处理 M2 SearchCriteria。
许可: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 个参数
- 字段提取器(
Renttek\SearchCriteriaProcessor\FieldExtractor\FieldExtractorInterface
) - 连接列表(
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 个参数
- 要连接的主表中的字段名
- 要连接的外部表名
- 要连接的外部表中的字段名
安装
通过 composer
composer require renttek/magento2-search-criteria-processor
贡献
您想改进此库,报告或甚至修复一个错误?太棒了!请,这样做:)
您有疑问吗?您可以在这里联系我
- Twitter: @Renttek92
- E-Mail: juliann+github@renttek.de