【问题标题】:How do I sort associations (on field or custom field)如何对关联进行排序(在字段或自定义字段上)
【发布时间】:2023-01-20 18:24:01
【问题描述】:

我有以下代码用于自动加载所有产品的streams(动态产品组),但我想根据自定义字段对它们进行排序。

public function search(Criteria $criteria, SalesChannelContext $salesChannelContext): EntitySearchResult
{
    $criteria->addAssociation('streams');

    return $this->decorated->search($criteria, $salesChannelContext);
}

我如何使用$criteria(意味着通过 SQL)对结果进行排序,或者我是否必须在获得结果后使用标准 PHP 对其进行排序?

【问题讨论】:

  • 我认为您需要在 PHP 中对它进行排序,因为 SQL 中的 custom_fields 只是一个字段中所有 custom_field 值的一些 JSON 表示

标签: sorting entity associations criteria shopware


【解决方案1】:

关联也允许传递排序信息和附加过滤器:

public function search(Criteria $criteria, SalesChannelContext $salesChannelContext): EntitySearchResult
{
    $criteria->addAssociation('streams');
    $criteria->getAssociation('streams')
        ->addSorting(new FieldSorting('createdAt', FieldSorting::DESCENDING))
        ->addFilter(new NotFilter(NotFilter::CONNECTION_AND, [new EqualsFilter('id', 'c0aeba4aff28462db3ef3880514fe62d')]);

    return $this->decorated->search($criteria, $salesChannelContext);
}

如果关联在 getAssociation() 通话期间不存在,则会自动添加。因此,您可以完全省略 addAssociation() 调用。

通过 PHP 进行排序和过滤始终是一个很好的备份:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多