msProducts выбор по нескольким значениям одной опции

Всем привет. Может кто сталкивался с таким. Пытаюсь на феном создать конструкцию фильтра
{var $where["id:!="] = $_modx->resource.id}
{var $filter = ["fabric:IN" => $_modx->resource.fabric]}
{if $_modx->resource.model?}
{set $filter["model:IN"] = $_modx->resource.model}
{/if}
{if $_modx->resource.consist?}
{foreach $_modx->resource.consist as $idx=>$consist}
{if $idx === 0}
{set $filter["consist"] = $consist}
{else}
{set $filter["AND:consist:="] = $consist}
{/if}
{/foreach}
{/if}
{var $similar = '!msProducts' | snippet : [
'parents' => 19,
'limit' => 10,
'depth' => 0,
'includeThumbs' => 'thumb',
'sortby' => 'RAND()',
'tpl' => 'tplProductAdd',
'where' => $where | toJSON,
'optionFilters' => $filter | toJSON,
'showLog' => 1
]}
Никак не могу правильно составить конструкцию чтобы было в sql:… AND `consist`.`value` = 'Значение1' AND `consist`.`value` = 'Значение2' AND `consist`.`value` = 'Значение3'… (У данной опции можно задавать несколько значений)
Евгений Лазарев
12 августа 2020, 19:46
modx.pro
454
0

Комментарии: 1

Павел Гвоздь
14 августа 2020, 05:45
0
Гляньте в код сниппета. Он обрезает всё что после двоеточия включительно. Ваш ключ AND:consist:= превращается в опцию AND. А несколько переданных вами одинаковых ключей в массиве само собой превратятся в один. То бишь ваши несколько AND:consist:= в массиве становятся одним (последним присвоенным) элементом.

Данная задача решается через where + leftJoin на стороне вызова сниппета. Джойните опции, по которым осуществляете выборку и в where пишете:
'where' => [
    'consist = "first_value"',
    'consist = "second_value"',
],
без ключей.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1