Php 如何在Symfony默认查询生成器中添加列

Php 如何在Symfony默认查询生成器中添加列,php,symfony,Php,Symfony,我是Symfony的新手,我维护的现有应用程序有问题 在其中一个存储库中,有一种方法,可以选择失败的交易和相关的付款 现在,他们要求我允许根据失败交易的总金额过滤交易,失败交易可以是1失败交易或2 我试图在查询生成器中执行的操作如下: $this ->createQueryBuilder('t') ->join('t.payment', 'p') ->leftJoin( Transaction::class, 'tr', Query\Exprt\Join

我是Symfony的新手,我维护的现有应用程序有问题

在其中一个存储库中,有一种方法,可以选择失败的交易和相关的付款

现在,他们要求我允许根据失败交易的总金额过滤交易,失败交易可以是
1
失败交易或
2

我试图在查询生成器中执行的操作如下:

$this
    ->createQueryBuilder('t')
    ->join('t.payment', 'p')
    ->leftJoin( Transaction::class, 'tr', Query\Exprt\Join::WITH, 'p.id = tr.payment')
    ->groupBy('tr.id');

array:1 [▼
  0 => array:2 [▼
    0 => Transaction {#1221 ▶}
    "TotalRecords" => "1"  <- This is the total transactions number I need
  ]
]
在那之前一切都很好。查询是正常执行的,我可以看到我需要的事务

现在的问题是,我不能使用以下语句:

$this
    ->createQueryBuilder('t')
    // This is the column I need to insert
    ->addSelect('COUNT(tr.id) AS TotalRecords')
    ->join('t.payment', 'p')
    ->leftJoin( Transaction::class, 'tr', Query\Exprt\Join::WITH, 'p.id = tr.payment')
    ->groupBy('tr.id');
因为输出如下所示:

$this
    ->createQueryBuilder('t')
    ->join('t.payment', 'p')
    ->leftJoin( Transaction::class, 'tr', Query\Exprt\Join::WITH, 'p.id = tr.payment')
    ->groupBy('tr.id');

array:1 [▼
  0 => array:2 [▼
    0 => Transaction {#1221 ▶}
    "TotalRecords" => "1"  <- This is the total transactions number I need
  ]
]
数组:1[▼
0=>数组:2[▼
0=>事务{#1221▶}

“TotalRecords”=>“1”您可以在结果集上循环,并在所有事务对象上设置TotalRecords…然后返回一个事务数组,这可能是您所希望的。开销很小,但标准方法不够智能

// the following is your query:
$qb = $this
    ->createQueryBuilder('t')
    ->addSelect('COUNT(tr.id) AS TotalRecords')
    ->join('t.payment', 'p')
    ->leftJoin( Transaction::class, 'tr', Query\Exprt\Join::WITH, 'p.id = tr.payment')
    ->groupBy('tr.id');

// fetch the results, and instead of straight returning them, "merge"
$results = $qb->getQuery()->getResult();
$return = [];
foreach($result as $row) {
    $row[0]->totalCount = $row['TotalCount'];
    $return[] = $row[0];
}
return $return; // <-- now an array of Transaction
//以下是您的查询:
$qb=$this
->createQueryBuilder('t')
->addSelect('将(tr.id)计数为TotalRecords')
->加入('t.payment','p')
->leftJoin(事务::类'tr',查询\Exprt\Join::带有'p.id=tr.payment')
->groupBy('tr.id');
//获取结果,而不是直接返回结果,“合并”
$results=$qb->getQuery()->getResult();
$return=[];
foreach($结果为$行){
$row[0]->totalCount=$row['totalCount'];
$return[]=$row[0];
}

return$return;//开箱即用,在向实体添加自定义字段或使用一般计算字段时,条令不起作用。您应该看看基本上允许您将给定查询自定义映射到给定实体的方法。它在简单情况下工作得很好。非常感谢@Cerad。但我不能做此更改,因为项目是not 100%是我的。他们只是让我做那个独特的改变:(.无论如何,非常感谢!!:)