Shopware6 - 由于我的 foreach 循环无法获取值

问题描述

我们目前有这个代码来获取一些属性组选项:

//Nederlands & English
$languages = ['94a1a2d118464bdaab37d6e05d404508','2fbb5fe2e29a4d70aa5854ce7ce3e20b'];
$context = new Context(new SystemSource(),[],Defaults::CURRENCY,$languages);
$criteria = new Criteria();

Foreach ($propertiesArray as $property)
{
    $criteria->addFilter(new EqualsFilter('name',$property['name']);
    $lineInfo = $this->propertyGroupOptionRepository->search($criteria,$context)->first();
    var_dump($lineInfo);
}

由于某种原因,它无法获取值 'Zilver' 并且 $lineInfo 返回空对象。但是值 'Zilver' 存在于数据库中,语言 ID 为 'Nederlands' = 94a1a2d118464bdaab37d6e05d404508(在上下文中给出)。

奇怪的事实:它非常适合我的 $propertiesArray 数组的第一项。如果我尝试手动将 $property['value'] 替换为 'Zilver' 并将其与 foreach 循环隔离,我可以得到我需要的结果。

我是否做错了什么或误解了它的工作方式?

这是 $propertiesArray =

的转储
      [0]=>
      array(1) {
        ["value"]=>
        string(10) "Eenkleurig"
      }
      [1]=>
      array(1) {
        ["value"]=>
        string(6) "Zilver"
      }
      [2]=>
      array(1) {
        ["value"]=>
        string(5) "Praag"
      }

信息:我们实例的主要语言是英语,但我们目前正在使用一个向我们发送荷兰值的系统。

解决方法

我不完全确定商店用品,但是您的逻辑似乎有缺陷,因为您在每次迭代中都向同一个 EqualsFilter 添加了额外的 Criteria。这就是为什么只有第一次搜索成功。
尝试在循环中创建一个新的 Criteria inside

//Nederlands & English
$languages = ['94a1a2d118464bdaab37d6e05d404508','2fbb5fe2e29a4d70aa5854ce7ce3e20b'];
$context = new Context(new SystemSource(),[],Defaults::CURRENCY,$languages);

Foreach ($propertiesArray as $property)
{
    $criteria = new Criteria();
    $criteria->addFilter(new EqualsFilter('name',$property['name']);
    $lineInfo = $this->propertyGroupOptionRepository->search($criteria,$context)->first();
    var_dump($lineInfo);
}

在查看文档后,我认为您可能实际上想要使用 EqualsAnyFilter,然后您只需要对数据库进行一次查询。这应该会更有效率。

//Nederlands & English
$languages = ['94a1a2d118464bdaab37d6e05d404508',$languages);
$criteria = new Criteria();

$criteria->addFilter(new EqualsAnyFilter('name',array_column($propertiesArray,'name')));
$results= $this->propertyGroupOptionRepository->search($criteria,$context);
var_dump($results);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...