我想做一个查询,在同一个表中调用最近的日期。
$query = $this->createQueryBuilder('a')
->select('a.amount')
->where('a.product = :productId')
->andWhere('a.id = :id'),
$recentDate = null;
if($date === null){
$recentDate = $this->createQueryBuilder('a')
->select($query->expr()->max('a.date'))->getQuery()->getResult();
$query->andWhere('a.date = :recentDate');
}else{
$query->andWhere('a.date = :date');
}
$query->setParameters(array(
'productId' => $productId,
'id' => $id,
'date' => $date,
'recentDate' => $recentDate,
));
return $query;
但是我有这个问题:
Invalid parameter number: number of bound variables does not match number of tokens
只需将您的"date"参数和"recentDate"参数命名为相同的名称,它们不能在您的请求中一起使用,并且只在您的setParameters()
中传递此唯一参数
$query = $this->createQueryBuilder('a')
->select('a.amount')
->where('a.product = :productId')
->andWhere('a.id = :id')
->andWhere('a.date = :date');
if($date === null){
$date = $this->createQueryBuilder('a')
->select($query->expr()->max('a.date'))->getQuery()->getResult();
}
$query->setParameters(array(
'productId' => $productId,
'id' => $id,
'date' => $date
));
return $query;
试试这个:
$query->setParameters(array(
'productId' => $productId,
'id' => $id
));
if($date === null) {
$query->setParameter(':recentDate', $recentDate);
} else {
$query->setParameter(':date', $date);
}
如果$date != null,则recentDate参数不是查询的一部分,反之亦然,因此date参数也不是。
也许有一个更优雅的方式来构建这个查询?亲切的问候乔
你为一个只有3个参数的查询提供了4个参数。
$query = $this->createQueryBuilder('a')
->select('a.amount')
->where('a.product = :productId')
->andWhere('a.id = :id'),
$recentDate = null;
if($date === null){
$recentDate = $this->createQueryBuilder('a')
->select($query->expr()->max('a.date'))->getQuery()->getResult();
$query->andWhere('a.date = :recentDate');
}else{
$query->andWhere('a.date = :date');
}
$query->setParameters(array(
'productId' => $productId,
'id' => $id,
));
if($date === null){
$query->setParameter('recentDate', $recentDate);
}else{
$query->setParameter('date', $date);
}