簡體   English   中英

Shopware6 - 由於我的 foreach 循環而無法獲取值

[英]Shopware6 - not able to get values due to my foreach loop

我們目前有這個代碼來獲取一些屬性組選項:

//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 返回空的 object。 但是值 ' 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"
      }

信息:我們實例的主要語言是英語,但我們目前正在使用一個在荷蘭向我們發送值的系統。

我對商店軟件並不完全確定,但是您的邏輯似乎存在缺陷,因為您在每次迭代中向相同的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM