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 returns 空对象。但是值'Zilver'存在于数据库中,其中language_id为'Nederlands'= 94a1a2d118464bdaab37d6e05d404508(在上下文中给出) .
奇怪的事实:它非常适合我的 $propertiesArray 数组的第一项。如果我尝试用 'Zilver' 手动替换 $属性['value'] 并将其与 foreach 循环隔离,我可以获得我需要的结果。
我是不是做错了什么或误解了它的工作方式?
这里是 $propertiesArray 的转储 =
[0]=>
array(1) {
["value"]=>
string(10) "Eenkleurig"
}
[1]=>
array(1) {
["value"]=>
string(6) "Zilver"
}
[2]=>
array(1) {
["value"]=>
string(5) "Praag"
}
信息:我们实例的主要语言是英语,但我们目前正在使用一个在荷兰向我们发送值的系统。
我对 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);
我们目前有此代码来获取一些 属性 组选项:
//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 returns 空对象。但是值'Zilver'存在于数据库中,其中language_id为'Nederlands'= 94a1a2d118464bdaab37d6e05d404508(在上下文中给出) .
奇怪的事实:它非常适合我的 $propertiesArray 数组的第一项。如果我尝试用 'Zilver' 手动替换 $属性['value'] 并将其与 foreach 循环隔离,我可以获得我需要的结果。
我是不是做错了什么或误解了它的工作方式?
这里是 $propertiesArray 的转储 =
[0]=>
array(1) {
["value"]=>
string(10) "Eenkleurig"
}
[1]=>
array(1) {
["value"]=>
string(6) "Zilver"
}
[2]=>
array(1) {
["value"]=>
string(5) "Praag"
}
信息:我们实例的主要语言是英语,但我们目前正在使用一个在荷兰向我们发送值的系统。
我对 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);