通过ID获取产品的父项

时间:2020-11-06 08:08:36

标签: shopware


我正在尝试通过产品ID与他的父母一起获得产品,并且我有以下代码:

/**
 * @param string[] $ids
 * @return ProductCollection|EntityCollection
 */
public function getProductsByIds(array $ids): ProductCollection
{
    $criteria = new Criteria($ids);
    $criteria->addAssociation('parent');

    return $this->productRepository
        ->search($criteria, Context::createDefaultContext())
        ->getEntities();
}

但是问题是我正在运行以下代码:

$products = $this->productService->getProductsByIds([$id]);
$product = $products->first();
dd($product->getParent());

我每次都得到null

如何获得Product父项,以及在哪里可以找到有关Association方法的“路径”的更多信息?

2 个答案:

答案 0 :(得分:0)

执行方法时,将获得EntityCollection,而不是Single实体。因此,您应该使用以下代码:

$products = $this->productService->getProductByIds([$id]);
foreach($products as $product) {
    dd($product->getParent());
}

并确保您的产品当然有父母:)

答案 1 :(得分:0)

在 Shopware 6.3.4.0 版本上,我现在收到错误 400。

<块引用>

无法直接读取父关联。请通过存储库的单独调用阅读父母

所以我删除了 Association 并创建了一个单独的方法来获取一个与父级的产品。

public function getProductById(?string $id): ?ProductEntity
{
    if ($id === null) {
        return null;
    }

    $products = $this->getProductsByIds([$id]);
    $product = $products->first();

    if ($product !== null && $product->getParentId() !== null) {
        $parent = $this->getProductById($product->getParentId());

        if ($parent !== null) {
            $product->setParent($parent);
        }
    }

    return $product;
}