Реализация фильтрации в shopModx

Добрый день, нужен совет или точек в каком направлении двигаться. Начал делать фильтры, расширил класс, все роде работает нормально. При реализации фильтрования почему-то работает только с 1 параметром если выбрать 2 уже почему то не очень хочет искать.

Добавил выборку по TV

$c->leftJoin('modTemplateVarResource','TVResources', 'TVResources.contentid = Product.resource_id');
$c->leftJoin('modTemplateVar','TemplateVar', 'TVResources.tmplvarid = TemplateVar.id');

ну и само условие where

foreach ($tvFilters as $value) {
    $key = explode("==", $value);
    $filter['TemplateVar.name'] = $key[0];
    $filter['TVResources.value:='] = $key[1];
    $c->where($filter);
}

и так тоже пробовал

$filter_array = array();
foreach ($tvFilters as $value) {
    $key = explode("==", $value);
    $filter['TemplateVar.name'] = $key[0];
    $filter['TVResources.value:='] = $key[1];
    $filter_array[] = $filter;
}
$c->where($filter_array);

с 1 значением выводит если выбрать уже 2 TV поля то уже перестает работать. Подскажите в чем у меня ошибка, в каком направлении копать.

Comments

Копать в сторону изучения SQL. Не может у тебя одно TV поле называться и 'somename_1' и 'somename_2'. А у тебя при указании двух параметров формируется запрос where tv_name = 'somename_1' AND tv_name = 'somename_2';

Запросы у меня создаются примерно такие

WHERE  (
( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 )  
AND `modResource`.`parent` IN (156,178,179,180,181,182,183,184,185,186,187,188,189,190,191)
AND (
( `TemplateVar`.`name` = 'shape' AND `TVResources`.`value` = 'rectangle' )  AND  ( `TemplateVar`.`name` = 'processing_edge' AND `TVResources`.`value` = '10' )
)
)

или

WHERE  (
( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 )  
AND `modResource`.`parent` IN (156,178,179,180,181,182,183,184,185,186,187,188,189,190,191)
AND  ( `TemplateVar`.`name` = 'shape' AND `TVResources`.`value` = 'rectangle' )  AND  ( `TemplateVar`.`name` = 'processing_edge' AND `TVResources`.`value` = '10' )
)

Каждое поле по отдельности, но не как не вместе

Потому и говорю «учи SQL». Ты не совсем понимаешь принципа работы базы данных. Каждая выбранная строка должна соответствовать всем указанным условиям. Возьми из всех своих строк только одну. Будет ли в ней name равняться сразу и 'shape' и 'processing_edge'? Это физически не возможно. У тебя должно быть примерно так:

WHERE  (
( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 )  
AND `modResource`.`parent` IN (156,178,179,180,181,182,183,184,185,186,187,188,189,190,191)
AND  (
( `TemplateVar`.`name` = 'shape' AND `TVResources`.`value` = 'rectangle' )  OR ( `TemplateVar`.`name` = 'processing_edge' AND `TVResources`.`value` = '10' )
)
)

ладно а как тогда построить запросто что бы он проверил 2 TV в одном ресурсе,

modxclub.ru/blog/voprosy-spetsyalistov/256.html

$alias = $c->getAlias();
$c->innerJoin('modTemplateVarResource',  'tv_shape', "tv_shape.contentid = {$this->classKey}.id AND tv_shape.tmplvarid = $tv_shape_id AND tv_shape.value='rectangle'");
$c->innerJoin('modTemplateVarResource',  'tv_processing_edge', "tv_processing_edge.contentid = {$this->classKey}.id AND tv_processing_edge.tmplvarid = $tv_processing_edge_id AND tv_processing_edge.value='10'");

Николай большое спасибо за помощь, все работает.