На първо място това е quote
не Quote
.На второ място трябва да използвате quoteName()
за имена на полета. Трето, няма причина да спрете да използвате API само защото имате подзаявка. Също така кодът ви е много объркващ относно това кое е името на полето и кое е стойността. Предполагам, че $sf_value
представлява стойността, която се опитвате да съпоставите и adcfvc.field
е името на полето, което съхранява данните, които се опитвате да съпоставите.
Заменете
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
с
AND ' . $db->quoteName( 'adcfvc.field_value' ) . ' LIKE ' . $db->quote('%' . JString::strtolower($sf_value) . '%')
Не съм сигурен защо използвате JString там, но ако смятате, че е необходимо, добре.
Ето вашата подзаявка
SELECT adcfvc.advert_id
FROM #__koparent_advert_specific_fields_values AS adcfvc
WHERE adcfvc.advert_id = p.id
AND adcfvc.field_name = ' . $db->Quote($sf_key) . '
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
Така че, тъй като имате $db
вече.
$subquery = $db->getQuery(true);
// Assuming p.id is an integer
$subquery->where($db->quoteName(adcfvc.advert_id) = p.id)
//Assuming $sf_key is an integer
->where($db->quoteName(adcfvc.field_name) . ' = ' . $sf_key)
->where($db->quoteName(adcfvc.field_value) . ' LIKE '
. $db->Quote('%'. JString::strtolower($sf_value) . '%')) ;
След това в заявката от най-високо ниво, от която току-що ни показахте една част, нещо като
$query->where('p.id IN (' . $subquery . ')' );