【问题标题】:Shopware6 - not able to get values due to my foreach loopShopware6 - 由于我的 foreach 循环而无法获取值
【发布时间】:2021-08-22 15:49:17
【问题描述】:

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

//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' 存在于数据库中,其 language_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"
      }

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

【问题讨论】:

    标签: php symfony data-access-layer shopware


    【解决方案1】:

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

    //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', '2fbb5fe2e29a4d70aa5854ce7ce3e20b'];
    $context = new Context(new SystemSource(), [], Defaults::CURRENCY, $languages);
    $criteria = new Criteria();
    
    $criteria->addFilter(new EqualsAnyFilter('name', array_column($propertiesArray, 'name')));
    $results= $this->propertyGroupOptionRepository->search($criteria, $context);
    var_dump($results);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多