Ok, mam coś takiego:
[obiekt_jakis_1]
(
[featureForm] => Array
(
[0] => Array
(
[id] => 38
[count] => 1
[formId] => 133
)
[1] => Array
(
[id] => 49
[count] => 0
[formId] => 135
)
)
)
[obiekt_jakis_2]
(
[featureForm] => Array
(
[0] => Array
(
[id] => 48
[count] => 1
[formId] => 133
)
[1] => Array
(
[id] => 52
[count] => 1
[formId] => 135
)
)
)
count - jeżeli 1, zawiera cechę o id "formId"
teraz mam zapytanie do bazy (trochę warunków WHERE)
$qb -> from('Application\Entity\Phone', 'p');
$qb -> join('p.link','l');
$qb -> where('p.active = 1');
$qb -> leftJoin('p.prices','price');
$qb -> andWhere('price.value > :minPrice');
$qb -> andWhere('price.value < :maxPrice');
$qb -> setParameter('minPrice',$minPrice);
$qb -> setParameter('maxPrice',$maxPrice);
Po czym do zapytania dołączam:
foreach($form as $id =>$value)
$qb -> leftJoin('p.featureForm','formId_'.$id,'WITH','formId_'.$id.'.count = 1 AND 'formId_'.$id.'.answerId = '.$id);
Lecz problem w tym że gdy w select odwołam się do "count(formId_$id) as ct_form_$id ",
otrzymuję wynik nieuwzględniający np cen.
Co prawda mógłbym dodać warunki where do left join ale to byłoby masakrycznie niewydajne.
Jak można odwołać się do zewnętrznej tabeli tak żeby zliczyła tylko te wartości które są zwracane w tym zapytaniu a nie jak to ma teraz miejsce że odwołuje się do wszystkich elementów (nawet nieaktywnych i niemieszczących się z zakresie cen)?
Pozdrawiam,
Konrad