symfony Shopware 6的权限和类别在API中为空

db2dz4w8  于 2023-10-24  发布在  PWA
关注(0)|答案(1)|浏览(184)

我为Shopware 6创建了一个插件,并尝试创建多个产品。在创建一些产品之前,我在管理面板中添加了一些演示产品。但是如果我读取这些产品的变量,则字段violet和categories为空,但是在管理面板中有一些值。我不明白为什么在管理面板中它可以显示,而在插件中它是空的。代码在bin/console的命令中运行。

$context = Context::createDefaultContext();
$products = $this->productRepository->search(new Criteria(), $context);
foreach ($products as $p => $product) {
    $product->get('visibilities'); // -> empty in command but not in admin panel
    $product->get('categories'); // -> empty in command but not in admin panel
}
czq61nw1

czq61nw11#

在Shopware 6中,当您使用ProductRepository从数据库中检索产品时,默认情况下通常不会加载产品的可见性和类别。这是因为Shopware出于性能原因使用称为“关联”的概念延迟加载相关数据。这意味着当您检索产品时,可能不会加载其相关数据(如类别和可见性),直到明确请求。
要确保为代码中的每个产品加载可见性和类别数据,可以使用addAssociation方法指定要为每个产品加载哪些关联。以下是如何修改代码以加载每个产品的可见性和类别:

use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;

$context = Context::createDefaultContext();
$criteria = new Criteria();

// Add associations for visibility and categories
$criteria->addAssociation('visibilities');
$criteria->addAssociation('categories');

// Perform the product search with the updated criteria
$products = $this->productRepository->search($criteria, $context);

foreach ($products as $product) {
    // Now, the 'visibilities' and 'categories' should be loaded for each product
    $visibilities = $product->get('visibilities');
    $categories = $product->get('categories');
    
    // You can work with $visibilities and $categories here
}

通过向标准添加“访问量”和“类别”的关联,您可以指示SW在执行搜索时将这些相关实体沿着产品一起加载。这将用您期望的数据填充字段。

相关问题