Php Symfony原则以最近的日期为准

Php Symfony原则以最近的日期为准,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我想做一个查询,在where close中调用同一个表中的最近日期 $query = $this->createQueryBuilder('a') ->select('a.amount') ->where('a.product = :productId') ->andWhere('a.id = :id'), $recentDate = null; if($date === null){ $recentDate = $this->c

我想做一个查询,在where close中调用同一个表中的最近日期

$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;
但我有一个问题:

无效参数编号:绑定变量的数量与令牌的数量不匹配

请尝试以下操作:

$query->setParameters(array(
    'productId' => $productId,
    'id' => $id
));
if($date === null) {
  $query->setParameter(':recentDate', $recentDate);
} else {
  $query->setParameter(':date', $date);
}
如果$date!=null,反之亦然,因此不是日期参数

也许有一种更优雅的方法来构建这个查询

问候 乔

试试这个:

$query->setParameters(array(
    'productId' => $productId,
    'id' => $id
));
if($date === null) {
  $query->setParameter(':recentDate', $recentDate);
} else {
  $query->setParameter(':date', $date);
}
如果$date!=null,反之亦然,因此不是日期参数

也许有一种更优雅的方法来构建这个查询

问候
Joe

您为一个只有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);
}

您为一个只有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);
}
只需使用相同的名称命名“date”参数和“recentDate”参数,它们不能同时出现在您的请求中,并且只能在
setParameters()中传递此唯一参数

只需使用相同的名称命名“date”参数和“recentDate”参数,它们不能同时出现在您的请求中,并且只能在
setParameters()中传递此唯一参数