我正在尝试通过产品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方法的“路径”的更多信息?
答案 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;
}