如果getChildren()和getParent()函数总是返回null,如何使用它们



我注意到实体可以实现类似ProductEntity的getParent和getChildren函数。当我尝试使用它们中的任何一个时,即使在尝试添加->addAssociation('parent')->addAssociation('children')时,它似乎总是返回null。如何使用criteria对象加载子对象和父对象?

如果一个产品没有子产品,children的getter将返回null。添加关联通常会起作用。若要对此进行测试,您可以尝试添加一个筛选器,以仅检索应包括子项的结果。

$criteria = new Criteria();
$criteria->addAssociation('children');
$criteria->addFilter(new RangeFilter('childCount', [RangeFilter::GT => 0]));
/** @var ProductCollection $products */
$products = $this->productRepository->search($criteria, $context)->getEntities();
var_dump($products->first()->getChildren());

然而,parent关联是不同的。如果您尝试添加它,数据抽象层应该抛出一个ParentAssociationCanNotBeFetched异常:

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

如果以后要在堆栈中使用getter,则必须以编程方式解析父对象,并将它们设置为各自的子对象。

$criteria = new Criteria();
$criteria->addFilter(new NotFilter(NotFilter::CONNECTION_AND, [new EqualsFilter('parentId', null)]));
/** @var ProductCollection $products */
$products = $this->productRepository->search($criteria, Context::createDefaultContext())->getEntities();
$criteria = new Criteria($products->getParentIds());
/** @var ProductCollection $parents */
$parents = $this->productRepository->search($criteria, Context::createDefaultContext())->getEntities();
/** @var ProductEntity $product */
foreach ($products as $product) {
$parent = $parents->get($product->getParentId());
if (!$parent) {
continue;
}
$product->setParent($parent);
}
var_dump($products->first()->getParent());

最新更新