我喜欢从与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安装。
因此,首先要查询产品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
}