我想通过它的sku对产品进行排序。怎么可能呢? 我尝试添加ProductRepository.php:
...
$queryBuilder = $this->getCollectionQueryBuilder();
$queryBuilder
->innerJoin('product.taxons', 'taxon')
->innerJoin('product.variants', 'variant')
->andWhere('taxon = :taxon')
->setParameter('taxon', $taxon)
;
foreach ($criteria as $attributeName => $value) {
$queryBuilder
->andWhere('product.'.$attributeName.' IN (:'.$attributeName.')')
->setParameter($attributeName, $value)
;
}
$queryBuilder->orderBy('variant.sku');
...
但得到了:
无法使用LIMIT和ORDER BY从查询中选择不同的标识符 来自fetch的列加入了多个关联。使用输出 步行者。
答案 0 :(得分:1)
最后我做了什么:在custom twig function输出之前对产品进行排序:
macros.html.twig
{% set products = skusort(products) %}
在我的 SkusortExtenstion.php (自PHP 5.3起)
$product->getIterator()->uasort(function($a, $b){
return $a->getMasterVariant()->getSku() > $b->getMasterVariant()->getSku();
});
return $product;
担心性能问题,因为有很多产品,但似乎非常快。
答案 1 :(得分:0)
另一种方法是重新加载类Sylius \ Bundle \ ResourceBundle \ Doctrine \ ORM \ EntityRepository的方法getPaginator()。在这种情况下,我们必须使用$ useOutputWalkers标志(最新的构造函数参数)即时通知DoctrineORMAdapter。
因此,将以下代码放在ProductRepository.php中:
/**
* {@inheritdoc}
*/
public function getPaginator(QueryBuilder $queryBuilder)
{
return new Pagerfanta(new DoctrineORMAdapter($queryBuilder, true, true));
}