gnugat/search-engine

此包已被弃用且不再维护。未建议替代包。

组件尝试帮助您正确获取 CQRS 中的查询部分

v0.3.0 2016-05-19 17:07 UTC

This package is auto-updated.

Last update: 2022-02-01 12:50:29 UTC


README

一个概念验证,演示如何处理询问消息(CQRS 中的查询)。

命令/查询责任分离 原则解释说,命令和询问消息不应混合在一起。

注意:了解更多关于不同的 消息风味

通常使用 CommandBus 模式处理命令消息,这让我们面临以下问题:如何处理询问消息?

此组件尝试探索一个可能的答案:一个搜索引擎,会尝试返回符合给定标准的搜索结果。

警告:此组件不提供实际的搜索引擎功能,如果您正在寻找一个,那么您应该查看 ElasticSearch,Solr 等工具。

安装

使用 Composer 下载 SearchEngine

composer require gnugat/search-engine:^0.3

您还需要选择以下实现之一

  • PommSearchEngine,一个 Pomm 基础库 实现
  • 嘿,你刚刚遇到这个库,这太疯狂了,但它有接口,所以实现它们,也许吧?

其他可能的实现:PDO,Doctrine DBAL,Doctrine ORM 等。在 tests 目录中您可以找到一个 Array 实现示例。

有关实现的更多信息

使用

SearchEngine 期望一个 Criteria 对象,它描述了

  • 要查询的资源
  • 要嵌入的关系
  • 要应用的过滤器
  • 排序指令
  • 分页参数

它可以从查询参数构建,如下所示

// ...
$criteria = $criteriaFactory->fromQueryParameters('blog', [
    // Filters
    'title' => 'IG',
    'author_ids' => '1,3',

    // Pagination
    'page' => '2',
    'per_page' => '3',

    // Ordering
    'sort' => 'author_id,-title',

    // Relation embeding
    'embed' => 'author',
]);
print_r(iterator_to_array(
    $searchEngine
        ->match($criteria)
        ->take(
            $criteria->paginating->offset,
            $criteria->paginating->itemsPerPage
        )
        ->getIterator()
));

在 Web 上下文中,此 $queryParameters 数组可以是 $_GET,对应以下 URL

/v1/blogs?title=IG&author_ids=1,2&page=1&per_page=3&sort=author_id,-title&embed=author

结果可能是以下

[
    'items' => [
        [
            'id' => 1,
            'title' => 'Big Title',
            'author_id' => 1,
        ],
        [
            'id' => 2,
            'title' => 'Big Header',
            'author_id' => 2,
        ],
    ],
    'page' => [
        'current_page' => 1,
        'per_page' => 3,
        'total_elements' => 2,
        'total_pages' => 1,
    ],
]

更多信息

您可以使用以下方式查看当前和过去版本:

  • 使用 git tag 命令
  • 在 Github 上的 发布页面
  • 列出版本之间更改的文件

您可以在以下链接中找到更多文档:

下一章