symfony sylius如何通过分类法获得产品?

unhi4e5o  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一棵树的例子。

| Brands
|-- SuperTees
|-- Stickypicky
|-- Mugland
|-- Bookmania

字符串
我可以在“品牌”中按子类别获取所有产品,但无法按“品牌”获取所有产品。请帮助创建查询

6kkfgxo0

6kkfgxo01#

我自己解决了这个问题,但我不确定什么是正确的。我超控控制器和仓库。这是我的控制器。

use Symfony\Component\HttpFoundation\Request;
use Sylius\Bundle\CoreBundle\Controller\ProductController as BaseProductController;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Sylius\Component\Taxonomy\Model\Taxon;

class ProductController extends BaseProductController
{
    public function indexByTaxonomyAction(Request $request, $permalink)
    {
        /** @var Taxon $taxon */
        $taxon = $this->get('sylius.repository.taxon')
            ->findOneByPermalink($permalink);

        if (!isset($taxon)) {
            throw new NotFoundHttpException('Requested taxon does not exist.');
        }
        $ids = array($taxon->getId());

        /** @var Taxon $child */
        foreach ($taxon->getChildren() as $child) {
            array_push($ids, $child->getId());
        }

        $paginator = $this
            ->getRepository()
            ->createByTaxonsPaginator($ids);

        $paginator->setMaxPerPage($this->config->getPaginationMaxPerPage());
        $paginator->setCurrentPage($request->query->get('page', 1));

        return $this->render(
            $this->config->getTemplate('indexByTaxonomy.html'),
            array(
                'taxon' => $taxon,
                'products' => $paginator,
            )
        );
    }
}

字符串
它是我的存储库

use Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductRepository as BaseProductRepository;

class ProductRepository extends BaseProductRepository
{

    public function createByTaxonsPaginator(array $ids)
    {
        $queryBuilder = $this->getCollectionQueryBuilder();

        $queryBuilder
            ->innerJoin('product.taxons', 'taxon')
            ->andWhere('taxon.id IN ( :ids )')
            ->setParameter('ids', $ids)
        ;

        return $this->getPaginator($queryBuilder);
    }
}

p8ekf7hl

p8ekf7hl2#

如果您是出于显示/序列化的目的而使用产品,您可以呈现一个内部请求以重用现有的ProductController操作。
https://docs.sylius.com/en/1.12/cookbook/shop/embedding-products.html

相关问题