Search code examples
symfonydoctrinedql

Invalid parameter: token 1 is not defined in the query


Here is my code to filter pets base on a JSON ajax Query I am getting error follwoing image

enter image description here

public function filter($object, $active=true){

        $query = $this->createQueryBuilder('p');
        $query->innerjoin('TadpetProfessionalBundle:ProPet', 'pp', 'WITH', 'pp.professionalId = p.id');
        $query->innerjoin('TadpetManagerBundle:Pet', 'ppp', 'WITH', 'ppp.id = pp.petId');

        $query->where('p.isActive = :active')
        ->setParameter('active', $active);

        if(!empty($object->pets)){
            $qString = "";
            for($i=1; $i<=sizeof($object->pets); $i++){
                if($i == 1){
                    $qString .= "ppp.name = :petname".$i;
                }else{
                    $qString .= " OR ppp.name = :petname".$i;
                }
            }
            $query->andWhere($qString);

            $query->setParameter('petname'+1,$object->pets[0]);
            $query->setParameter('petname'+2,$object->pets[1]);
            $query->setParameter('petname'+3,$object->pets[2]);
        }
        return $query->getQuery()->getResult();

}

Help me please


Solution

  • In these lines:

    $query->setParameter('petname'+1,$object->pets[0]);
    $query->setParameter('petname'+2,$object->pets[1]);
    $query->setParameter('petname'+3,$object->pets[2]);
    

    You are adding 'petname' to the numbers, but you should concatenate them:

    $query->setParameter('petname'.1,$object->pets[0]);
    $query->setParameter('petname'.2,$object->pets[1]);
    $query->setParameter('petname'.3,$object->pets[2]);
    

    Also, you could use a loop:

    for($i=1; $i<=sizeof($object->pets); $i++){
        $query->setParameter('petname'.$i,$object->pets[$i-1]);
    }