Allereerst is het quote
niet Quote
.Ten tweede moet u quoteName()
. gebruiken voor namen van velden. Ten derde is er geen reden om te stoppen met het gebruik van de API alleen omdat je een subquery hebt. Ook is je code erg verwarrend over wat de veldnaam is en wat de waarde is. Ik neem aan dat $sf_value
staat voor de waarde die u probeert te matchen en adcfvc.field
is de naam van het veld waarin de gegevens worden opgeslagen die u probeert te matchen.
Vervang
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
met
AND ' . $db->quoteName( 'adcfvc.field_value' ) . ' LIKE ' . $db->quote('%' . JString::strtolower($sf_value) . '%')
Ik weet niet zeker waarom je JString daar gebruikt, maar als je denkt dat het nodig is, prima.
Hier is uw subquery
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
Dus jij, aangezien je $db
. hebt al.
$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) . '%')) ;
Dan in de zoekopdracht op het hoogste niveau, waarvan u ons zojuist een deel hebt laten zien, zoiets als
$query->where('p.id IN (' . $subquery . ')' );