$query = $modx->newQuery('modResource'); $query->select(array('modResource.id AS resourceId')); $query->innerJoin('modTemplateVarTemplate', 'TVValues', array('TVValues.contentid = modResource.id')); $query->where(array('TVValues.tmplvarid:=' => 8));
SELECT modResource.id AS resourceId FROM `modx_site_content` AS `modResource` JOIN `modx_site_tmplvar_templates` `TVValues` ON TVValues.contentid = modResource.id WHERE `TVValues`.`tmplvarid` = '8'
$query->innerJoin('modTemplateVarTemplate', 'TVValues', "TVValues.contentid = modResource.id AND TVValues.tmplvarid = 8");
$query->where(array('TVValues.tmplvarid = 8'));
P.S. И вероятно предполагалось modTemplateVarResource, а не modTemplateVarTemplate.
Он не может знать является ли указанный алиас алиасом xPDO-объекта или просто алиас временной таблицы
А вот сформировать правильный запрос можно.
Если уж очень хочется именно в where засунуть условие, то так: $query->where(array('TVValues.tmplvarid = 8'));
И xPDO этой элементарной проверки почему-то не выполняет…
Вообще, у меня в коде много десятков подобных запросов по всему коду. Всегда полагался на типизацию xPDO. А сейчас, похоже, придётся все запросы перешерстить. Странно, что все запросы выполнялись корректно… до сегодняшнего дня…
Здорово поможете, если навскидку состряпаете эту обёртку. Если нет — поковыряюсь сам…
У вас где-то запрос не так выполняется (имеется ввиду получаете не те результаты)? Мускул сам типизацию проведет, это вам не сортировка.
Сравнение числового поля со строковой константой всегда даёт false (в этом случае MySQL числовые значения поля приводит к строковому типу)
Это в сортировках может получиться, что '87' будет меньше чем '9', но 8 == '8'.
Что касается сабжа, то лучше я обёртку напишу. Так будет надёжнее.