Symfony Version 3.2.8
I am unsure what is causing this error, according to Doctrine Documentation the setParameter function is being used correctly?
Broken Code:
public function getNewShipChoices($uid, $fid) {
/*Identify ships all ready added in fleet and do not allow them to be added again*/
$q2 = $this->createQueryBuilder('c')
->select('DISTINCT (c2.shipId)')
->join('AppBundle:ShipsFleet', 'c2')
->where('c.userid = :uid')->setParameter('uid', $uid)
->andWhere('c2.fleetId = :fid')->setParameter('fid', $fid);
$query = $this->createQueryBuilder('c3');
$query->where($query->expr()->notIn('c3.shipId', $q2->getDQL()))->andWhere('c3.userid = :uid')->setParameter('uid', $uid);
return $query->getQuery()->getResult();
}
Another thing I tried was to hard code the setParameter values, which brings the same error message
->where('c.userid = :uid')->setParameter('uid', 1)
->andWhere('c2.fleetId = :fid')->setParameter('fid', 1);
Working Code: Replacing the setParameter with hard coded values instead of passing in 2 integer values of 1 and 1 works fine.
public function getNewShipChoices($uid, $fid) {
$q2 = $this->createQueryBuilder('c')
->select('DISTINCT (c2.shipId)')
->join('AppBundle:ShipsFleet', 'c2')
->where('c.userid = 1')
->andWhere('c2.fleetId = 1');
$query = $this->createQueryBuilder('c3');
$query->where($query->expr()->notIn('c3.shipId', $q2->getDQL()))->andWhere('c3.userid = 1');
return $query->getQuery()->getResult();
}
Did I miss something completely obvious?
Try this adding single quotes to '1'.
Why not trying setParameters instead of setParameter ?
Doctrine expression 'notIn' accepts array values in second argument. You have given query. Also, you should bind parameter using 'setParameter' to avoid injection. Please try this.