查询产品主义IND Akeneo(Query products with Doctrine ind

2019-11-05 02:36发布

我喜欢从与akeneo自定义命令从数据库中获取一些产品。 我使用的是ProductRepositoryInterface

public function read()
{
    return $this->repository->findBy(
        [
            'enabled' => true,
            'family' => ['projector', 'projector_child', 'projector_parent'],
        ]
    );
}

这是生成的查询:

SELECT t0.id AS id1, t0.is_enabled AS is_enabled2, t0.created AS created3, t0.updated AS updated4, t0.family_id AS family_id5 FROM pim_catalog_product t0 WHERE t0.is_enabled = ? AND t0.family_id IN (?)

正如你可以在声明看,家庭是有螺纹的ID。 但我想通过家族码进行查询。

我有什么改变? 在Pim/Component/Catalog/Model/AbstractProduct是家庭和FAMILYID的属性。 所以必须要查询的家族码的方式。

也许是相关的,但是这是一个Akeneo 1.6安装。

Answer 1:

因此,首先要查询产品Akeneo,你应该使用的产品查询生成器 (PQB)。 如果您使用的是1.6,这里是链接到使用它的文件,这是非常简单的: https://docs.akeneo.com/1.6/cookbook/catalog/product/query.html

为了具有可以与PQB使用的属性和领域的过滤器的一个详尽的清单,你可以使用php app/console pim:product:query-help命令你的PIM。

正如您所注意到,家庭是不是一个属性,但一个行业,你就在上面的命令领域过滤器找到它:

php app/console pim:product:query-help

Useable field filters...
+-----------------+--------------------------------+-----------------------------------------------------------+
| field           | operators                      | filter_class                                              |
+-----------------+--------------------------------+-----------------------------------------------------------+
| family          | IN, NOT IN, EMPTY, NOT EMPTY   | Pim\Bundle\CatalogBundle\Doctrine\ORM\Filter\FamilyFilter |
| family.id       | IN, NOT IN, EMPTY, NOT EMPTY   | Pim\Bundle\CatalogBundle\Doctrine\ORM\Filter\FamilyFilter |
| family.code     | IN, NOT IN, EMPTY, NOT EMPTY   | Pim\Bundle\CatalogBundle\Doctrine\ORM\Filter\FamilyFilter |
+-----------------+--------------------------------+-----------------------------------------------------------+

您现在可以看到,你可以在搜索family.code领域。

对于你的榜样,你会像这样结束:

<?php
// Get a new instance of the PQB
$pqbFactory = $this->getContainer()->get('pim_catalog.query.product_query_builder_factory');
$pqb = $pqbFactory->create([
    'default_locale' => 'en_US',
    'default_scope' => 'ecommerce'
]);

// Now you can search for products with your family codes
$pqb->addFilter(
    'family.code',
    'IN',
    ['projector', 'projector_child', 'projector_parent']
);

// Retrieve your products
$productsCursor = $pqb->execute();
foreach ($productsCursor as $product) {
    // your custom logic
}


文章来源: Query products with Doctrine ind Akeneo