按 ID 获取 parent 个产品

Get parent of Product by ID

我正在尝试通过产品 ID 获取带有他 parent 的产品,我有以下代码:

/**
 * @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

如何获得产品 parent 以及在哪里可以阅读有关 'paths' 关联方法的更多信息?

当您执行您的方法时,您得到的是 EntityCollection,而不是单个实体。所以你应该使用下面的代码:

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

并确保您的产品具有 parents 当然:)

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

It is not possible to read the parent association directly. Please read the parents via a separate call over the repository

所以我删除了 Association 并创建了一个单独的方法来获取 one Product with a parent.

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;
}